본문 바로가기
Web/Server & MySQL

[2021.08.09] How to set SSL on Nginx Using Centos7?

by injekim97 2021. 8. 9.
반응형

[2021.08.09] How to set SSL on Nginx Using Centos7?  

 

 

 

-> 위의 사진처럼 하는 것이 이번 finhub 프로젝트의 목표이다.

 

 

 

이제 Nginx에서 SSL 설치 및 포트 포워딩 하는 방법에 대해서 알아보자

+ 여러개의 도메인 서버에 SSL 추가하는 방법 포함

* 환경 : Centos7

 

 

 

 

 

https://injekim97.tistory.com/378

 

[2021.08.06~09] 인턴 +158 How to get SSL issued? (SSL 발급 받는 방법?) :: 기초부터 다지는 공부기록

 

injekim97.tistory.com

-> SSL 발급 받는 방법

 

 

 

https://injekim97.tistory.com/383

 

[2021.08.09] 인턴 +161 How to modify pending DNS on the ssls.com site?

[2021.08.09] 인턴 +161   How to modify pending DNS on the ssls.com site? 보류중인 SSL, 도메인 이름 수정 방법 1. ssls.com에서, 실시간 채팅으로 상담기능 이용 2. Linux에서 만든 CSR 파..

injekim97.tistory.com

-> SSL 도메인 이름 바꾸는 방법

현재 도메인명 : *.gateway.finhub.co.kr
수정 될 도메인명 : *.finhub.co.kr

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

ssls.com 파일에서 다운로드 zip 파일을 압축해보면, 총3개로 구성 되어 있다.

 

 

star.finhub.co.kr.ca-bundle  star.finhub.co.kr.crt  star.finhub.co.kr.p7b

* star.finhub.co.kr.crt  
-> 도메인.crt 파일

* star.finhub.co.kr.ca-bundle
-> 중간 인증서와 루트 인증서가 포함되어 있다.

* star.finhub.co.kr.p7b
-> 상담을 통해 물어보니, Nginx에서는 p7b를 사용하지 않는다고 한다.

 

 

Nginx에 SSL를 설치하기 위한 과정들

Step 1: Combine Certificates Into One File (인증서 파일을 하나로 결합)

1-1) Method if you received and uploaded the intermediate and root Certificates separately
->  중간 인증서와 루트 인증서를 별도로 받아서 업로드한 경우의 방법

cat your_domain.crt middle.crt root.crt >> ssl-bundle.crt
cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >> ssl-bundle.crt


1- 2 ) Method if you received the intermediate Certificates in one bundle file, or downloaded the Certificate files from your SSLs.com Account
-> 중간 인증서를 하나의 번들 파일로 받았거나 SSLs.com 계정에서 인증서 파일을 다운로드한 경우 방법
나는 1-2에 해당한다. 이 방법으로 설명하겠다.


하기전에, 디렉토리를 만들어 파일을 옮긴 후

sudo chmod 777 디렉토리명
cat your_domain.crt your_domain.ca-bundle >> ssl-bundle.crt
[centos@ip-172-31-8-236 crt_directory]$ cat star.finhub.co.kr.crt star.finhub.co.kr.ca-bundle >> ssl-bundle.crt
[centos@ip-172-31-8-236 crt_directory]$ ls
ssl-bundle.crt  star.finhub.co.kr.ca-bundle  star.finhub.co.kr.crt  star.finhub.co.kr.p7b
[centos@ip-172-31-8-236 crt_directory]$



이제 nginx conf 파일을 수정 하자
* ssl_certificate 

/home/centos/crt_directory/ssl-bundle.crt

-> 아까 1-2에서 bundle 과 도메인.crt를 병합해서 생성한 파일 경로를 지정해주면 된다.



* ssl_certificate_key

/home/centos/example-rsa.key

-> CSR과 함께 생성된 key파일을 경로로 지정해줘야함.

 

 

openssl rsa -in example.key -out example-rsa.key

-> ★ nginx에서 SSL 키를 사용하려면,  rsa키로 꼭 변환해줘야 한다.

 

 

 


이제 nginx를 restart 했는데 아래와 같은 에러메세지 발생

nginx[10496]: nginx: [emerg] PEM_read_bio_X509("/인증서파일경로/unified.myssl.pem") failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line)

원인 : 이 에러는 병합할 때, ----------가 계행이 되지 않은 경우이다.

해결 방법 : ---------- 를 계행 해주면 됨

 

 

 

예 ) 잘못된 경우

[centos@ip-172-31-8-236 crt_directory]$ cat ssl-bundle.crt
-----BEGIN CERTIFICATE-----
MIIGNTCCBR2gAwIBAgIQZXGnXtufixG1PRtv2owilTANBgkqhkiG9w0BAQsFADCB
jzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQD
-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIGEzCCA/ugAwIBAgIQfVtRJrR2uhHbdBYLvFMNpzANBgkqhkiG9w0BAQwFADCB
iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
~~~~-----END CERTIFICATE-----


예 ) 잘 수정한 경우  

[centos@ip-172-31-8-236 crt_directory]$ cat ssl-bundle.crt
-----BEGIN CERTIFICATE-----
MIIGNTCCBR2gAwIBAgIQZXGnXtufixG1PRtv2owilTANBgkqhkiG9w0BAQsFADCB
jzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQD
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE-----
MIIGEzCCA/ugAwIBAgIQfVtRJrR2uhHbdBYLvFMNpzANBgkqhkiG9w0BAQwFADCB
iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
-----END CERTIFICATE-----

 

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------
이제 nginx에 SSL 설치 * 포트 포워딩을 해보자.

 

 

<Centos7 에서 SSL 설정 방법 - 21.08.10 성공>

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;



# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}


http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  smtrgateway.finhub.co.kr;
        #root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }


        location / {
        proxy_pass http://127.0.0.1:8080;
     }

        rewrite ^ https://$server_name$request_uri? permanent;

}

# Settings for a TLS enabled server.

    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  smtrgateway.finhub.co.kr;
        #root         /usr/share/nginx/html;

        ssl on;
        ssl_certificate "/etc/pki/nginx/crt_directory/ssl-bundle.crt";
        ssl_certificate_key "/etc/pki/nginx/example-rsa.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;


        location / {
        proxy_pass http://127.0.0.1:8080;
        }


        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

 

nginx.conf
0.00MB

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------
<SSL 설치 전 모습>

 

 

 

<SSL 설치 후 모습>

 

 

 

------------------------------------------------------------------------------------------------------------------------------

★ 포트 포워딩을 해주기 위해선 ★

 server {
        listen       80;
        listen       [::]:80;
        server_name  smtrgateway.finhub.co.kr;

        location / {
        proxy_pass http://127.0.0.1:8080;
     }
}

 

  location / {
    proxy_pass http://127.0.0.1:8080;   
    # 즉, server_name으로 접속하면, proxy_pass에 의해 8080 포트로 보내준다는 의미이다.
}

 

 

 

★ http(80) 포트로 접속하면, https(443) 포트로 보내주기 위해선? ★

rewrite ^ https://$server_name$request_uri? permanent;

 

 

 

 

★ 여러개의 도메인 서버에 SSL을 설정하려면?? ★

  server {
        listen       80;
        listen       [::]:80;
        server_name  center.finhub.co.kr merchant.finhub.co.kr gateway.finhub.co.kr


        # Load configuration files for the default server block.
        #include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }


        location / {
        proxy_pass http://127.0.0.1:8080;
     }
        rewrite ^ https://$server_name$request_uri? permanent;
}

 

server_name  center.finhub.co.kr merchant.finhub.co.kr gateway.finhub.co.kr

-> 위의 코드에서 server_name만 바꿔주면 됨 (콤마 없이 뛰어쓰기로 추가해주면 된다.)

반응형

댓글