본문 바로가기
IT/Web

[Apache] CentOS7 httpd SSL 인증서 적용 방법(https)

by 퐁시냥 2023. 1. 23.

CentOS7 Apache httpd SSL 인증서(http -> https) 적용 방법을 공유 드리겠습니다. 

간단한 작업이었지만, 사내 폐쇄망 환경이라 많은 삽질 끝에 발견한 방법이라 조금이나마 도움이 되었으면 좋겠습니다. 

 

1. 적용 환경

  • OS : CentOS 7 
  • Apache Version : 2.4.6
  • 도메인 인증서 : *.aaa.net (예시) 

(저는 사내에서 구매한 도메인 인증서를 적용하였습니다.)

 

2. 사전 작업

1) mod_ssl 설치

sudo yum install mod_ssl

2) SSL 인증서 다운로드

구매한 도메인 인증서 파일은 아래와 같이 구성되어 있을 것입니다. 

Chain_RootCA_Bundle.crt
ChainCA1.crt
ChainCA2.crt
RootCA.crt
star_aaa_net.pem
star_aaa_net_key.pem

이 중에 필요한 파일은 아래와 같습니다. 

  • Chain_RootCA_Bundle.crt  : RootCA + ChainCA1.crt + ChainCA2.crt 번들 파일
  • star_aaa_net.pem : Domain 인증서 파일
  • star_aaa_net_key.pem : Domain 인증서 key 파일

3) 서버 방화벽 443 오픈 

호스트 서버 443 포트가 오픈 되어 있지 않다면 curl 로 연결 시 아래와 같은 메세지를 확인 할 수 있습니다. 

curl: (7) Failed connect to bbb.aaa.net:443; No route to host

## 1. firewalld 실행확인 
sudo systemctl status firewalld 

## 2. 443 포트 추가 
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp

## 3. 443 포트 추가 확인 
sudo firewall-cmd --list-all-zone

public
...
ports: 80/tcp 3306/tcp 3306/udp 443/tcp

 

3. httpd 설정 변경 

1) conf 변경

  • 경로 : /etc/httpd/conf/httpd.conf

httpd.conf 파일 하단에 아래 설정값 추가 

  • /etc/httpd/conf.d/ssl.conf 파일에서 443 포트 Listen 하고 있을 수 있으니 확인해보기!
  • Apache 2.4.8+ 부터는 SSLCertificateChainFile -> SSLCACertificateFile 로 변경
  • Listen 443 https ~ 부터는 ssl.conf 파일에 추가해도 무방함. 
#  Redirect  http -> https
 
<VirtualHost *:80>
 
ServerName bbb.aaa.net:80
DocumentRoot "/var/www/html/"
 
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L]
</VirtualHost>
 
<IfModule !ssl_module>
  LoadModule ssl_module modules/mod_ssl.so
</IfModule>

# https Listen 설정

Listen 443 https
 
<VirtualHost *:443>
DocumentRoot "/var/www/html/"
 
ServerName bbb.aaa.net:443
 
ServerAdmin root@bbb.aaa.net
 
ErrorLog "/var/log/httpd/error_log"
 
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCertificateFile /var/www/html/certs/star_aaa_net_cert.pem
SSLCertificateKeyFile /var/www/html/certs/star_aaa_net_key.pem
SSLCertificateChainFile /var/www/html/certs/Chain_RootCA_Bundle.crt
</VirtualHost>

 

[httpd.conf SSL 설정정보]

  • SSLEngine : SSL/TLS 프로토콜 엔진의 사용 여부를 설정 
  • SSLProtocol : 사용 가능한 SSL/TLS 프로토콜 버전을 설정 
  • SSLCertificateFile : 서버 인증서 
  • SSLCertificateKeyFile : Private Key(비밀키) -> 암호 설정 시 apache 재기동 할 때 암호 필요
  • SSLCertificateChainFile : 체인 인증서

 

저는 apache 재기동 할 때마다 star_aaa_net_key.pem 의 키 비밀번호를 입력해야 하는 번거로움이 있어 아래와 같이 .pem 파일을 .key 파일로 복호화 해주었습니다. 

openssl rsa -in star_aaa_net_key.pem -out star_aaa_net_key.key

# 패스워드 입력 
Enter pass phrase for star_aaa_net_key.pem:

writing RSA key

복호화 해준 파일로httpd.conf key 파일을 대체해주었습니다.

SSLCertificateKeyFile /var/www/html/certs/star_aaa_net_key.key

 

2) httpd 재시작

  • httpd 재시작
sudo systemctl restart httpd
  • 443 포트 Listen 확인
netstat -ntp | grep 443

 

3) 인증서 정상 적용 확인 

  • 적용된 도메인 인증서, 체인 인증서 정보 확인
openssl s_client -connect bbb.aaa.net:443

 

  • 통신 확인
curl bbb.aaa.net:443

호스트 서버 443 포트가 오픈 되어 있지 않다면 curl 로 연결 시 아래와 같은 메세지를 확인 할 수 있습니다.

curl: (7) Failed connect to bbb.aaa.net:443; No route to host

  • 웹브라우저 적용 확인

브라우저에서 해당 사이트 접속 후 좌측 상단의 열쇠모양을 클릭하면 정상 적용되었는지 확인할 수 있습니다. 

아직 적용이 되지 않은 상태이면 쿠키 삭제 후에 다시 접속 하면 됩니다. 

https-인증서-적용확인
https-인증서-적용확인

 

댓글