Linux,Unix,BSD/Apache, PHP

SSL 인증서 적용 후, httpd 서비스 실행 오류 발생 문제 (CentOS)

채윤아빠 2019. 9. 5. 14:55
728x90
반응형



문제점 및 증상

SSL 인증서를 적용한 후, 다음과 같은 오류가 발생하며 httpd 서비스가 정상적으로 실행되지 않습니다.

$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 수 2019-09-04 18:06:12 KST; 10s ago
     Docs: man:httpd.service(8)
  Process: 106535 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 106535 (code=exited, status=1/FAILURE)
   Status: "Reading configuration..." 

 9월 04 18:06:11 C1-L-WB-NAS-001 systemd[1]: Starting The Apache HTTP Server...
 9월 04 18:06:12 C1-L-WB-NAS-001 httpd[106535]: AH00526: Syntax error on line 108 of /etc/httpd/conf.d/ssl.conf:
 9월 04 18:06:12 C1-L-WB-NAS-001 httpd[106535]: SSLCertificateFile: file '/home/nfs/share/ssl/www.we-builder.co.kr.pem' does not exist or is empty
 9월 04 18:06:12 C1-L-WB-NAS-001 systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
 9월 04 18:06:12 C1-L-WB-NAS-001 systemd[1]: Failed to start The Apache HTTP Server.
 9월 04 18:06:12 C1-L-WB-NAS-001 systemd[1]: Unit httpd.service entered failed state.
 9월 04 18:06:12 C1-L-WB-NAS-001 systemd[1]: httpd.service failed.

원인 분석

오류의 직접적인 원인인 "SSLCertificateFile: file '/home/nfs/share/ssl/www.we-builder.co.kr.pem' does not exist or is empty" 파일은 문제 없이 존재하고 있습니다.

audit 로그를 확인해보니, 아래와 같은 오류가 존재하였습니다.

$ audit2allow < /var/log/audit/audit.log

#============= httpd_t ==============

#!!!! WARNING: 'home_root_t' is a base type.
#!!!! The file '/home/nfs/share/ssl/www.we-builder.net.pem' is mislabeled on your system.
#!!!! Fix with $ restorecon -R -v /home/nfs/share/ssl/www.we-builder.net.pem
allow httpd_t home_root_t:file getattr;

결론적으로 SSL 인증서 파일들이 모두 존재하고는 있으나, httpd 서비스에서 읽을 수 있도록 "httpd_config_t"로 되어 있어야 하는데, "home_root_t"로 되어 있어서 httpd 서비스에서 필요한 SSL 인증서 파일을 읽지 못하여 위와 같은 오류가 발생하였습니다.


해결 방안

다음과 같이 SSL 인증서가 들어 있는 폴더의 권한을 "chcon" 명령을 이용하여 "httpd_config_t"로 변경하고, httpd 서비스를 시작하면 정상적으로 실행됩니다.

$ chcon -R -t httpd_config_t /home/nfs/share/ssl
$ systemctl restart httpd
$ ll -Z /home/nfs/share
drwxr-xr-x. apache apache unconfined_u:object_r:httpd_config_t:s0 ssl