개발 및 테스트 환경의 HTTPS 구현을 위해 OpenSSL로 사설 인증서를 생성하는 방법을 정리합니다. 실무에서 혼동하기 쉬운 Key, CSR, CRT 파일의 정확한 역할 정의부터, 개인키 패스워드 제거 및 Apache 적용까지의 전체 프로세스를 다룹니다.
0. 배경 지식: 인증서 파일의 종류와 역할
SSL 인증서 발급 과정은 개인키 생성 → 인증 요청(CSR) → 인증서 발급(CRT)의 순서로 진행됩니다. 각 단계에서 생성되는 파일의 역할을 명확히 이해해야 합니다.
- 1. Private Key (
.key):- 서버가 갖는 비밀 열쇠입니다. 데이터를 암호화/복호화하는 핵심 파일로, 절대 외부로 유출되어서는 안 됩니다.
- 이 키를 분실하면 인증서를 재발급받아야 합니다.
- 2. CSR (
.csr- Certificate Signing Request):- 인증 기관(CA)에 "내 인증서를 만들어 달라"고 보내는 신청서입니다.
- 공개키(Public Key) 정보와 도메인, 회사 정보(DN)가 포함되어 있습니다.
- 3. Certificate (
.crt):- 최종적으로 발급된 인증서(신분증)입니다.
- CSR 내용을 바탕으로 CA(혹은 본인)가 전자 서명을 한 파일이며, 클라이언트(브라우저)에게 전송됩니다.
Test Environment
- OS: CentOS 7.2
- Web Server: Apache HTTP Server
- Tool: OpenSSL
1. 개인키(Private Key) 생성
가장 먼저 모든 암호화 통신의 기반이 되는 개인키를 생성합니다.
1) 암호화된 개인키 생성
des3 알고리즘을 사용하여 2048비트 길이의 RSA 키를 생성합니다. 이때 설정하는 패스워드(Pass Phrase)는 키를 보호하기 위한 장치입니다.
[root@web01 test]# openssl genrsa -des3 -out test.vn.key 2048
Generating RSA private key, 2048 bit long modulus
..........................+++
e is 65537 (0x10001)
Enter pass phrase for test.vn.key: [패스워드 입력]
Verifying - Enter pass phrase for test.vn.key: [패스워드 확인]
2) 개인키 패스워드 제거 (필수 권장)
패스워드가 걸린 키를 웹 서버에 그대로 적용하면, 서버가 재기동될 때마다 관리자가 매번 패스워드를 입력해야 합니다. 자동 운영을 위해 패스워드를 제거한 키를 다시 생성합니다.
# 1. 원본 키 백업
cp test.vn.key test.vn.key.orig
# 2. 패스워드가 제거된 키 생성 (덮어쓰기)
openssl rsa -in test.vn.key.orig -out test.vn.key
# 결과 메시지
Enter pass phrase for test.vn.key.orig: [기존 패스워드 입력]
writing RSA key
2. 인증 요청서(CSR) 생성
생성된 개인키(.key)를 바탕으로 인증서 발급 신청서(.csr)를 작성합니다.
CSR 생성 명령어
openssl req -new -key test.vn.key -out test.vn.csr
주요 입력 정보 (DN: Distinguished Name)
명령 실행 후 입력해야 할 정보입니다. 다른 정보는 임의로 입력해도 되지만, Common Name은 반드시 정확해야 합니다.
- Country Name: 국가 코드 (예: KR, VN)
- State / Locality: 지역 정보 (예: Seoul)
- Organization: 회사명/부서명 (예: IT Team)
- Common Name (CN): 서비스 도메인 주소 (가장 중요! 예: *.test.vn)
3. 사설 인증서(CRT) 생성 (Self-Signing)
우리는 공인 인증 기관(VeriSign 등)이 없으므로, 생성한 CSR에 내 개인키로 직접 서명(Self-Sign)하여 인증서(CRT)를 만듭니다.
인증서 생성
유효기간을 365일로 설정하여 최종 인증서를 생성합니다.
# -req : CSR을 입력받음
# -signkey : 스스로 서명할 키 지정
openssl x509 -req -days 365 -in test.vn.csr -signkey test.vn.key -out test.vn.crt
# 성공 시 출력 메시지
Signature ok
subject=/C=VN/ST=Hanoi/L=lotte/O=admin/OU=admin/CN=*.test.vn
Getting Private key
최종 파일 확인
작업이 완료되면 다음 3개의 파일이 있어야 합니다.
test.vn.key: 개인키 (패스워드 제거됨, 서버 설정에 사용)test.vn.crt: 인증서 (서버 설정에 사용)test.vn.csr: 신청서 (발급 완료 후에는 불필요)
4. Apache 설정 및 검증
생성된 키와 인증서를 Apache 설정 파일(httpd.conf 또는 ssl.conf)에 등록하여 HTTPS를 활성화합니다.
설정 적용
# SSL 엔진 활성화
SSLEngine on
# 1. 인증서 파일 경로 지정 (.crt)
SSLCertificateFile /etc/httpd/conf/ssl/test.vn.crt
# 2. 개인키 파일 경로 지정 (.key)
SSLCertificateKeyFile /etc/httpd/conf/ssl/test.vn.key
검증 (Verification)
Apache를 재기동하고 브라우저로 접속해 봅니다. 패스워드를 묻지 않고 기동되어야 정상입니다.
- 재기동:
systemctl restart httpd - 브라우저 접속:
https://test.vn
사설 인증서는 브라우저가 신뢰하는 기관(CA) 목록에 없으므로, 접속 시 "주의 요함" 또는 "안전하지 않음" 경고가 뜨는 것이 정상입니다. 테스트 환경에서는 예외를 추가하여 진행하면 됩니다.