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도 없음 → 브라우저 신뢰 불가
반응형
'Linux' 카테고리의 다른 글
[Linux] 쉘스크립트로 실시간 파일 감시 시스템 구성 (0) | 2025.04.29 |
---|---|
[AWS] EC2 에서 JDK 11 설치 (0) | 2023.03.27 |
[SCP] AWS SCP 파일전송 및 사용법 정리 (0) | 2023.03.27 |
[Linux] 개발자를 위한 네트워크 지식과 명령어 (0) | 2023.03.09 |
[Linux] 프로세스 확인 & 죽이기 Kill 명령어 (0) | 2022.10.12 |
댓글