본문 바로가기

카테고리 없음

📌 Nginx SSL 인증서 등록 및 HTTPS 적용 방법 (SELinux 환경)

📌 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 연결 테스트

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 설정하는 완벽한 가이드 🔥