티스토리 뷰

DevOps/NginX

[NginX] SSL 인증서 적용하기.

종벌🍀 2024. 7. 30. 11:15
반응형

 

 

 

 



 

 

nginx

 

 

 

저는 기존에 사용하는 도메인에 대한 ssl 을 가지고 있다는 전제하에 nginx 에 ssl 적용하는 포스팅하려고 합니다.

 

 

*.abc.com  이란 도메인을 가지고 있고 비밀번호가 설정 되어있습니다.

보통 도메인에 대한 ssl 을 구매하시면 웹서버 종류별로 SSL 파일을 제공해줍니다.

 

pem, p7b, pfx, keystore 등등의 파일들

 

 

nginx 는  cert.pem, key.pem  이 두 파일을 가지고 있으면 됩니다.

 

 

key.pem 은 개인키가 설정되어 있는 파일입니다.

그리고 cert.pem 파일을 열어보면

발급받은 도메인 인증서와 체인인증서의 내용이 합쳐져 있는 것을 확인 할 수 있습니다.

(* 만약 cert.pem 이 제공되지 않았다면 도메인인증서와 체인인증서를 합쳐서 만들어줘야하는 작업이 필요할 수 있습니다.)

 

 

 

 

 

 

 

 

 

 

 


NGINX + SSL 적용

 

 

cert.pem과 key.pem  인증서 관련 파일을 적절한 위치에 복사합니다.

저는 관리하기 쉽게 nginx 폴더 안에 위치시켰습니다.

 

/etc/nginx/ssl/

 

 

 

 

 

그리고 설정파일을 vi 에디터로 열어 도메인에 대한 ssl 설정을 해줍니다.

(저는 conf.d 하위 폴더에 default.conf 에 작성 되어있습니다. 사용자 마다 설정파일 위치가 다를 수 있습니다.)

 

[root@localhost conf.d]# vi default.conf

 

server {
    listen       443 ssl;
    server_name  blog.abc.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_password_file /etc/nginx/ssl/pass.txt;

    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #ssl_ciphers HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
}

server {
        listen 80;
        server_name blog.abc.com;
        #return 301 https://blog.abc.com;
        location / {
            return 301 https://$host$request_uri;
        }
}

 

 

위와 같이 443 포트에 대한 설정을 진행합니다.

cert.pem 과 key.pem 의 위치를 지정해줍니다.

 

 

 


 

제 key.pem 은 비밀번호가 적용되어있어  ssl_password_file 옵션을 사용하여 비밀번호를 자동으로 인지하게 해줬습니다.

* 일반 텍스트 파일로 작성해줘야 합니다. 아파치에서 쓰듯이 sh 파일로 작성했는데 nginx 에서 올바르게 암호를 풀지 못했습니다.

 

 

pass.txt 에 대한 내용은 암호를 바로 작성해주면 됩니다.

 

[root@localhost ssl]# cat pass.txt
비밀번호

 


 

 

 

 

그리고 이제 80 포트로 들어오는 리퀘스트도 443으로 리다이렉트 되게끔 설정해줍니다.

(http 로 들어왔던 리퀘스트도 같이 던져주기 위해 $request_uri 로 설정했습니다.  return 301 로 /index 에만 보내버리면 사용자가 요청한 것들이 모두 날라가기 때문입니다.)

 

server {
        listen 80;
        server_name blog.abc.com;
        #return 301 https://blog.abc.com;
        location / {
            return 301 https://$host$request_uri;
        }
}

 

 

 

위와 같이 다 작성했으면 conf 파일을 저장하고

nginx 테스트를 진행해봅니다.

 

[root@localhost nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

 

문제가 없다면 위와같이 successful 메세지를 볼 수 있고 nginx 를 재구동시키면 잘 적용됩니다.

설정 작성에 문제가 있다면 관련된 오류 메세지가 나올 것 입니다.

 

 

 

 

 


 

만약 key.pem 에 비밀번호를 제거하고 싶다면 아래의 명령어를 사용하면 됩니다.

그러면 conf 파일에서 사용했던 ssl_password_file  비밀번호 옵션을 주석처리해도 됩니다.

 

[root@localhost ssl]# openssl rsa -in key.pem -out nokey.pem

 


 

 

 

 

 

 



 

 

 

 

 

 

 

OPENSSL 사용법 참고

 

 

[OPENSSL] key파일 생성 / 패스워드 생성, 제거, 확인 – 지락문화예술공작단

키파일 패스워드 확인 키파일에 패스워드가 설정 되어 있는지, 알고 있는 패스워드가 맞는지 확인 1. 키파일에 패스워드가 설정되지 않은 경우 openssl rsa -check -in jirak.net.key -noout RSA key ok 2. 키파

jirak.net

 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday