기본으로 제공되는 버전은 아래와 같다.

위 사이트에서 최신버전의 파일을 다운받는다.
내가 받은 파일은 openssl-3.5.0.tar.gz
sudo dnf groupinstall "Development Tools" -y
sudo dnf install perl-core zlib-devel -y
# 아래 경로에 파일을 다운로드 하였다.
mkdir ~/sw
cd ~/sw
tar -zxf openssl-3.5.0.tar.gz
ln -s openssl-3.5.0 openssl
cd openssl
# 빌드 및 설치 (절대경로로 하여야함)
./Configure --prefix=/home/ec2-user/sw/openssl --openssldir=/home/ec2-user/sw/openssl shared zlib

make -j$(nproc)
make install
vi ~/.bashrc
# 아래 내용 추가
export OPENSSL_HOME=/usr/local/openssl
export PATH=$OPENSSL_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENSSL_HOME/lib64:$LD_LIBRARY_PATH

# 인증서를 저장할 디렉터리 생성
cd /etc/nginx
mkdir ssl
# home directory에서 작업
cd
# root, server 디렉터리 생성
mkdir -p myCA/root myCA/server
cd ~/myCA/root
# CA 개인키 생성
openssl genrsa -out ca.key 2048
# CA 인증서 생성 (자체 서명, 10년 유효)
# 아래 ca.crt는 브라우저나 시스템에서 신뢰할 수 있는 루트로 등록할 수 있음
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt \
-subj "/C=KR/ST=Seoul/O=MyTestCA/CN=MyTestRootCA"
cd ~/myCA/server
# 서버용 키 생성
openssl genrsa -out server.key 2048
# CSR 생성 (서버용 인증서 요청)
# CN에는 실제 접속할 주소를 입력한다.
# 현재는 도메인으로 접속하지 않고 ip주소로 접속할 것이므로 아래와 같다.
openssl req -new -key server.key -out server.csr \
-subj "/C=KR/ST=Seoul/O=MyCompany/CN="3.39.227.149"
cd ~/myCA/root
# 서버 인증서에 서명하여 PEM 인증서 발급
openssl x509 -req -in ../server/server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out ../server/server.crt -days 365 -sha256
cd /etc/yum
mkdir repos.d
cd repos.d
vi nginx.repo
# 아래내용 추가
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum install -y nginx
systemctl start nginx
systemctl enable nginx
systemctl status nginx
server {
listen 80;
server_name 3.39.227.149;
return 301 https://$host$request_uri;
}
# HTTPS 요청 처리
server {
listen 443 ssl;
server_name 3.39.227.149;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_client_certificate /etc/nginx/ssl/ca.crt
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo nginx -t && sudo systemctl restart nginx
curl --cacert ~/myCA/root/ca.crt https://3.39.227.149


vi create_ssl_with_root_ca.sh
#!/bin/bash
# 📁 디렉토리 설정
ROOT_DIR="$HOME/myCA"
ROOT_CA_DIR="$ROOT_DIR/root"
SERVER_DIR="$ROOT_DIR/server"
IP_ADDR="3.39.227.149"
mkdir -p "$ROOT_CA_DIR" "$SERVER_DIR"
echo "✅ 디렉토리 구조 생성 완료"
# 📌 Root CA 개인키 및 인증서 생성
openssl genrsa -out "$ROOT_CA_DIR/ca.key" 2048
openssl req -x509 -new -nodes -key "$ROOT_CA_DIR/ca.key" \
-sha256 -days 3650 -out "$ROOT_CA_DIR/ca.crt" \
-subj "/C=KR/ST=Seoul/O=MyTestCA/CN=MyTestRootCA"
echo "✅ Root CA 생성 완료"
# 📌 서버 개인키 및 CSR 생성
openssl genrsa -out "$SERVER_DIR/server.key" 2048
# CSR 생성을 위한 설정 파일 (SAN 포함)
cat > "$SERVER_DIR/server.cnf" <<EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext
[dn]
C=KR
ST=Seoul
O=MyCompany
CN=$IP_ADDR
[req_ext]
subjectAltName = @alt_names
[alt_names]
IP.1 = $IP_ADDR
EOF
# CSR 생성
openssl req -new -key "$SERVER_DIR/server.key" -out "$SERVER_DIR/server.csr" \
-config "$SERVER_DIR/server.cnf"
echo "✅ 서버 CSR 생성 완료 (SAN 포함)"
# 📌 서버 인증서 Root CA로 서명
openssl x509 -req -in "$SERVER_DIR/server.csr" -CA "$ROOT_CA_DIR/ca.crt" -CAkey "$ROOT_CA_DIR/ca.key" \
-CAcreateserial -out "$SERVER_DIR/server.crt" -days 365 \
-sha256 -extfile "$SERVER_DIR/server.cnf" -extensions req_ext
echo "✅ 서버 인증서 서명 완료"
# 🔎 출력 요약
echo ""
echo "📂 인증서 및 키 파일 목록:"
echo "Root CA cert : $ROOT_CA_DIR/ca.crt"
echo "Server cert : $SERVER_DIR/server.crt"
echo "Server key : $SERVER_DIR/server.key"
echo ""
echo "🔧 NGINX 설정 예:"
cat <<EOL
server {
listen 443 ssl;
server_name $IP_ADDR;
ssl_certificate $SERVER_DIR/server.crt;
ssl_certificate_key $SERVER_DIR/server.key;
ssl_client_certificate $ROOT_CA_DIR/ca.crt;
ssl_verify_client off;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
}
}
EOL
echo ""
echo "🧪 테스트 명령:"
echo "curl --cacert $ROOT_CA_DIR/ca.crt https://$IP_ADDR"