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
- 웹브라우저 적용 확인
브라우저에서 해당 사이트 접속 후 좌측 상단의 열쇠모양을 클릭하면 정상 적용되었는지 확인할 수 있습니다.
아직 적용이 되지 않은 상태이면 쿠키 삭제 후에 다시 접속 하면 됩니다.
'IT > Web' 카테고리의 다른 글
[프론트엔드] 스파르타코딩클럽 웹개발 종합반 5주차 수강후기 (2) | 2021.11.20 |
---|---|
[프론트엔드] 스파르타코딩클럽 웹개발 종합반 4주차 수강후기 (0) | 2021.11.19 |
[프론트엔드] 스파르타코딩클럽 웹개발 종합반 3주차 수강후기 (0) | 2021.11.18 |
[프론트엔드] 스파르타코딩클럽 웹개발 종합반 2주차 수강후기 (1) | 2021.11.16 |
[프론트엔드] 스파르타코딩클럽 웹개발 종합반 1주차 수강후기 (1) | 2021.11.16 |
댓글