개요
도메인 : ilaya.com
상황 : 인증서 설치 후 서비스 재시작 불가 및 오류 발생
httpd error log
httpd[3636944]: SSLCertificateFile: file ‘/etc/httpd/SSL/ilaya.com.crt’ does not exist or is empty
에러 발생 원인 추정
1. Apache(httpd)가 설정 파일에 지정된 경로에서 인증서 파일을 찾지 못하는 경우
2. 파일이 존재하고 내용도 정상인 경우
- 권한(Permissions)
- SELinux 보안 정책 문제
서버 상태
1. 서버 환경
- OS : Linux
- SELINUX : ON
2. 점검 항목
- httpd 설정 정상 여부 : PASS
- ilaya.com.crt 파일 존재 : PASS
- 인증서 경로 및 인증서 파일의 권한 : PASS
- 파일 내용 정상 여부 : PASS
SELINUX 작동에 의한 결과로 추정
SELINUX 보안 설정 확인
1. 파일 상태 확인
# ls -Z /etc/httpd/SSL/ilaya.com.crt
unconfined_u:object_r:admin_home_t:s0 ilaya.com.crt
httpd_config_t 또는 cert_t가 포함되어야 하지만 결과에 있지 않음
2. 파일이나 디렉토리의 보안 문맥(Security Context)을 시스템에 정의된 기본값으로 되돌리기
# restorecon -v /etc/httpd/SSL/ilaya.com.crt
# ls -Z /etc/httpd/SSL/ilaya.com.crt
unconfined_u:object_r:cert_t:s0 ilaya.com.crt
cert_t 문자열이 포함되어 있음
이 상태에서 아파치를 재시작 하면 정상적으로 구동 완료됨
왜 이 명령어가 필요한가?
SELinux 시스템은 각 파일이 어디에 있어야 하는지(경로)에 따라 가질 수 있는 역할(Type)을 미리 지정
- /root에서 파일을 만들어 /etc/httpd/SSL로 mv 를 통해 “이동” 시
- 파일은 원래 가지고 있던 admin_home_t 라벨을 그대로 유지하게 됨
- Apache는 보안상 admin_home_t 라벨이 붙은 파일은 읽을 수 없도록 설계
→ 새로 추가된 인증서 파일을 불러들이지 못하고, 서비스 실행 실패로 이어짐
restorecon 명령을 실행 효과
대상 파일이 /etc/httpd/SSL에 있음을 확인 후 cert_t 라벨 추가
보완
1. /etc/httpd/SSL 하위의 모든 파일을 인증서 타입(cert_t)으로 정의
semanage fcontext -a -t cert_t “/etc/httpd/SSL(/.*)?”
2. 정의된 설정을 실제 파일 시스템에 적용
restorecon -Rv /etc/httpd/SSL
3. 이후 인증서 파일을 추가 하거나 갱신 하는 경우
- mv 가 아닌
- cp 혹은 vi 등으로 /etc/httpd/SSL 에서 직접 생성
한다면 동일한 문제를 방지 가능
4. 명령어 비교
특정 파일 하나에 대해서만 보안 문맥을 복구
restorecon -v /etc/httpd/SSL/ilaya.com.crt
- -v 옵션 : 작업 내용 출력
지정 디렉토리 및 안에 포함된 모든 하위 요소를 대상으로 복구 작업을 수행
restorecon -Rv /etc/httpd/SSL
- -v 옵션 : 작업 내용 출력
- -R 옵션 : 지정디렉토리 및 하위 모든 디렉토리와 파일들을 지정
