📌 Nginx SSL 인증서 등록 및 HTTPS 적용 방법 (SELinux 환경)
Nginx에서 SSL 인증서를 적용하여 HTTPS를 활성화하는 과정과 SELinux 설정 문제를 해결하는 방법을 정리합니다.
✅ 1. SSL 인증서 파일 준비
SSL 인증서 파일을 /etc/nginx/ssl/ 디렉터리에 복사합니다.
필요한 파일:
- .crt 파일 (인증서)
- .key 파일 (개인 키)
- 체인 인증서 (.crt 또는 .pem, 선택사항)
예시
sudo mkdir -p /etc/nginx/ssl
sudo cp ~/downloads/_wildcard_son1004004_ac_kr.crt /etc/nginx/ssl/
sudo cp ~/downloads/_wildcard_son1004004_ac_kr_SHA256WITHRSA.key /etc/nginx/ssl/
✅ 2. 인증서 파일 권한 설정
sudo chmod 600 /etc/nginx/ssl/*
sudo chown root:root /etc/nginx/ssl/*
📌 설명
- 600 권한을 설정하여 보안을 강화
- root:root 소유자로 설정하여 Nginx가 접근 가능하게 설정
✅ 3. Nginx 설정 파일 (nginx.conf) 수정
sudo vi /etc/nginx/nginx.conf
📌 HTTP → HTTPS 리디렉트 & SSL 적용 추가
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
listen [::]:80;
server_name son1004004.ac.kr;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name son1004004.ac.kr;
ssl_certificate /etc/nginx/ssl/_wildcard_son1004004_ac_kr.crt;
ssl_certificate_key /etc/nginx/ssl/_wildcard_son1004004_ac_kr_SHA256WITHRSA.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
error_page 500 502 503 504 /maintenance.html;
location = /maintenance.html {
root /usr/share/nginx/html;
internal;
}
}
}
✅ 4. SELinux 정책 수정
SELinux가 활성화된 경우, 기본적으로 /etc/nginx/ssl/의 인증서 파일을 읽지 못할 수 있음.
이를 해결하기 위해 SELinux 보안 컨텍스트를 조정해야 함.
sudo setsebool -P httpd_can_network_connect on
sudo chcon -t httpd_sys_content_t /etc/nginx/ssl/_wildcard_son1004004_ac_kr.crt
sudo chcon -t httpd_sys_content_t /etc/nginx/ssl/_wildcard_son1004004_ac_kr_SHA256WITHRSA.key
📌 설명
- setsebool -P httpd_can_network_connect on: Nginx가 외부 네트워크(Tomcat)와 통신하도록 허용
- chcon -t httpd_sys_content_t: SELinux 보안 컨텍스트 변경하여 Nginx가 인증서 파일을 읽을 수 있도록 설정
✅ 5. Nginx 설정 파일 확인 및 재시작
1️⃣ Nginx 설정 문법 확인
sudo nginx -t
✅ 성공 예시
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
2️⃣ Nginx 서비스 재시작
sudo systemctl restart nginx
3️⃣ Nginx 상태 확인
sudo systemctl status nginx
✅ 정상 실행 예시
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-03-11 10:56:06 KST; 38s ago
✅ 6. HTTPS 적용 확인
1️⃣ 브라우저에서 HTTPS 연결 테스트
- https://son1004004.ac.kr 접속
- 🔒 SSL 보안 자물쇠 아이콘 확인
2️⃣ 방화벽에서 HTTPS(443) 허용 확인
sudo firewall-cmd --list-all
✅ 443 포트가 없으면 추가
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
✅ 7. 인증서 자동 갱신 설정 (옵션)
무료 인증서(Let's Encrypt)를 사용할 경우, 자동 갱신을 설정할 수 있음.
sudo crontab -e
다음 줄 추가 (매월 1일 자동 갱신 후 Nginx 재시작)
0 0 1 * * certbot renew --quiet && systemctl restart nginx
✅ 결론
이제 Nginx에서 SSL 인증서를 적용하고 HTTPS로 서비스할 수 있음!
🔥 Nginx + SELinux 환경에서 HTTPS 설정하는 완벽한 가이드 🔥