본문 바로가기
Linux

[SSL] 폐쇄망 서버에서 X.509 v3 인증서 생성 및 적용기 (feat. OpenSSL)

by 띵앤띵 2025. 5. 20.
728x90

🔐 폐쇄망 서버에서 X.509 v3 인증서 생성 및 적용기 (feat. OpenSSL)

안녕하세요, 띵앤띵입니다 😊
오늘은 폐쇄망 환경에서 HTTPS를 적용해야 할 때 가장 먼저 부딪히는 문제,
바로 “유효한 인증서가 없다”는 상황을 해결하는 방법을 소개할게요!

공인 인증기관에서 발급받기 어려운 환경이라면,
우리가 직접 X.509 v3 인증서를 만들어서 적용하는 게 가장 현실적인 해결책입니다.
그럼 함께 만들어볼까요?


❓ X.509 인증서, 왜 v3여야 할까?

X.509 인증서는 총 세 가지 버전이 있어요:

버전 특징
v1 기본 필드만 있음 (Subject, Issuer 등)
v2 거의 사용 안 함
✅ v3 확장 필드(SAN 등) 필수 포함 → 요즘 브라우저에서 사실상 기본

💡 요즘 브라우저는 SAN(Subject Alternative Name)이 빠진 인증서를 거의 무조건 비신뢰로 처리해요.
따라서, 자체 서명이라도 반드시 v3 인증서로 만들어야 실질적인 테스트와 사용이 가능합니다!


🧱 Step 1. OpenSSL 설정 파일 만들기

먼저 openssl-v3.cnf라는 이름으로 설정 파일을 하나 만들어줘요:

[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_ca
prompt             = no

[ req_distinguished_name ]
C  = KR
ST = Seoul
L  = Seoul
O  = THINKANDTHING CO., LTD.
CN = ${DOMAIN_NAME} # 서버 도메인으로 변경해주세요

[ req_ext ]
subjectAltName = @alt_names

[ v3_ca ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = ${DOMAIN_NAME}         # 주 도메인
DNS.2 = www.${DOMAIN_NAME}     # 서브 도메인
IP.1  = ${SERVER_IP}           # 서버 내부 IP 또는 접속용 IP

DOMAIN_NAME과 SERVER_IP는 실제 도메인/IP로 바꿔주세요!
SAN 필드는 꼭 있어야 브라우저 경고 없이 접속됩니다.

 

🔐 Step 2. 인증서 생성하기 (v3 형식)

openssl req -x509 -nodes -days 3650
-newkey rsa:2048
-keyout ${DOMAIN_NAME}.key
-out ${DOMAIN_NAME}.crt
-config openssl-v3.cnf
-extensions v3_ca
.key: 서버의 개인키

.crt: 생성된 인증서

3650일: 무려 10년짜리! 😎

🔁 Step 3. PFX 포맷으로 변환 (Spring Boot용)
Spring Boot에서는 .pfx 또는 .jks를 선호해요. 우리는 .pfx로 변환해볼게요

openssl pkcs12 -export
-inkey ${DOMAIN_NAME}.key
-in ${DOMAIN_NAME}.crt
-out ${DOMAIN_NAME}.pfx
-name "${DOMAIN_NAME}"
-passout pass:${KEYSTORE_PASSWORD} # 비밀번호 설정
KEYSTORE_PASSWORD는 실제 비밀번호로 바꿔주세요!



🚀 Step 4. Spring Boot에 인증서 적용하기
application.yml에 아래 내용을 추가하면 돼요:

server:
	port: ${SSL_PORT} # 원하는 포트 지정
    ssl:
        enabled: true
        key-store: classpath:${DOMAIN_NAME}.pfx
        key-store-password: ${KEYSTORE_PASSWORD}
        key-store-type: PKCS12



그 후 서버를 재기동하고, 인증서를 확인해볼까요?

적용 후 서버를 재기동하고, 아래 명령어로 TLS 상태를 점검합니다:

openssl s_client -connect {IP}:{PORT} | openssl x509 -noout -text

# 버전확인
openssl x509 -in THINKANDTHING.crt -noout -text | grep Version

# SAN 필드 확인
openssl x509 -in THINKANDTHING.crt -noout -text | grep -A1 "Subject Alternative Name"

확인 포인트:

  • Version: 3 (0x2)
  • Subject Alternative Name: 항목 존재
  • 유효기간 확인

✅ 마무리

폐쇄망 환경에서도 인증서 문제로 TLS 적용을 미룰 수는 없습니다.

openssl만 있으면 스스로 인증서를 발급하고, 안전한 HTTPS 서비스를 구현할 수 있습니다.


🧠 팁 정리

  • X.509 v3 없으면 SAN도 없음 → 브라우저 신뢰 불가
반응형

댓글