#apache

[OpenSSL/Apache] 사설 인증서(Self-Signed Certificate) 생성 및 적용 완벽 가이드

개발 및 테스트 환경의 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)
Note: 추가 정보인 'Challenge password' 등은 입력하지 않고 Enter를 눌러 넘어가도 무방합니다.

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를 재기동하고 브라우저로 접속해 봅니다. 패스워드를 묻지 않고 기동되어야 정상입니다.

  1. 재기동: systemctl restart httpd
  2. 브라우저 접속: https://test.vn
주의 (Warning):
사설 인증서는 브라우저가 신뢰하는 기관(CA) 목록에 없으므로, 접속 시 "주의 요함" 또는 "안전하지 않음" 경고가 뜨는 것이 정상입니다. 테스트 환경에서는 예외를 추가하여 진행하면 됩니다.
Open Stream →
#IBM HTTPServer

[IBM HTTPServer] SSL(HTTPS) 구성 및 가상 호스트 설정 가이드

IBM HTTP Server(IHS)에 SSL 인증서를 적용하여 HTTPS 통신을 활성화하고, WebSphere Application Server(WAS)와 정상적으로 연동하기 위한 설정 절차를 정리합니다. httpd.conf 설정, 키 파일(KDB) 지정, 그리고 WAS 가상 호스트 포트 등록 과정을 포함합니다.

Test Environment

  • OS: CentOS 7.2 (경로는 Linux 기준, Windows는 드라이브명 참조)
  • Web Server: IBM HTTP Server v8.5
  • WAS: WebSphere Application Server v8.5

1. 웹 서버 설정 (httpd.conf)

IHS의 메인 설정 파일에서 SSL 모듈을 로드하고, 443 포트에 대한 VirtualHost를 구성해야 합니다.

설정 파일 수정

  • 파일 위치: [IHS_ROOT]/conf/httpd.conf
  • 주요 작업: 모듈 주석 해제, 포트 리슨, 인증서 키 파일(KDB) 경로 지정
### 1. SSL Module Load ###
LoadModule ibm_ssl_module modules/mod_ibm_ssl.so

### 2. Port Listen ###
Listen 0.0.0.0:443

### 3. Virtual Host Configuration ###
# 80 포트 (HTTP) 설정
<VirtualHost *:80>
    ServerName ad1.test.com
    DocumentRoot "/opt/IBM/HTTPServer/htdocs"
    # Redirect permanent / https://ad1.test.com/  (필요 시 HTTPS로 리다이렉트)
</VirtualHost>

# 443 포트 (HTTPS) 설정
<VirtualHost *:443>
    SSLEnable
    SSLClientAuth none
    ServerName ad1.test.com
    DocumentRoot "/opt/IBM/HTTPServer/htdocs"
    
    # 로그 설정 (권장)
    ErrorLog logs/ssl_error_log
    CustomLog logs/ssl_access_log common
</VirtualHost>

### 4. Global SSL Config ###
# VirtualHost 밖에서 전역 설정으로 Keyfile 지정
SSLDisable
Keyfile "/opt/IBM/HTTPServer/ssl/key.kdb"

# 보안 강화를 위한 프로토콜 설정 예시 (TLS 1.2만 허용 시)
# SSLProtocolDisable SSLv2 SSLv3 TLSv10 TLSv11
# SSLProtocolEnable TLSv12

Note: Keyfile 지시어는 kdb 파일의 경로를 지정합니다. 해당 경로에 key.sth (Stash file)이 함께 존재해야 암호를 묻지 않고 구동됩니다.


2. 인증서 키 파일 (KDB) 준비

IHS는 CMS Key Database (.kdb) 포맷을 사용합니다. ikeyman GUI 툴이나 gskcapicmd(CLI)를 사용하여 개인키와 인증서를 관리합니다.

  • 도구 위치: [IHS_ROOT]/bin/ikeyman (GUI 실행 시 X-Window 필요)
  • 작업 내용:
    • 새로운 KDB 파일 생성 (CMS 타입)
    • 개인키 생성 (CSR) 및 발급받은 인증서(Signer, Personal) Import
    • 중요: "Stash password to a file" 옵션을 체크하여 .sth 파일 생성 필수

3. WAS 가상 호스트 (Virtual Host) 등록

웹 서버 설정을 마쳤더라도, WAS의 가상 호스트 목록에 SSL 포트(443)가 등록되어 있지 않으면 플러그인이 요청을 거부하거나 WAS가 요청을 인식하지 못할 수 있습니다.

관리 콘솔 설정

  1. 위치: 환경(Environment) > 가상 호스트(Virtual Hosts) > default_host (또는 사용하는 가상 호스트) > 호스트 별명(Host Aliases)
  2. 작업: 새로 작성(New) 클릭
  3. 입력:
    • 호스트 이름: * (모든 호스트) 또는 ad1.test.com
    • 포트: 443
  4. 저장: 마스터 구성에 저장 후 변경 사항 동기화.

4. 검증 및 재기동

설정 파일의 문법 오류를 체크하고 웹 서버를 재기동하여 변경 사항을 적용합니다.

Syntax Check

# IHS bin 디렉토리로 이동
./apachectl -t

# 결과가 'Syntax OK'여야 함

Server Restart

./apachectl restart

Next Step:
브라우저에서 https://ad1.test.com으로 접속하여 자물쇠 아이콘이 정상적으로 표시되는지 확인하고, SSL Labs 등의 도구를 통해 적용된 암호화 프로토콜(TLS 1.2 등)의 보안 등급을 점검해보시기 바랍니다.

Open Stream →