본문 바로가기
NGINX

Nginx에 HTTPS SSL 적용하기

by SAMSUNG CLOUD-OKY 2021. 5. 28.
반응형

 

HTTPS키 발급 받기

HTTPS를 적용하기 위해서는 CA(Certification Authority)로 부터 certificate을 먼저 발급받아야 합니다.

국내에서는 후이즈, 가비아 등 에서 구매를 하실 수 있습니다.

다만 후이즈, 가비아에서도 외국의 업체를 통해서 certificate을 사는 방식이고 가격 또한 상대적으로 비싼편이기 때문에 해당 사이트에 직접 접속하셔서 구매하는 것을 추천 드립니다.

 

 

발급된 키 공개키/비공개키 만들기 (Optional)

구매가 완료 되셨다면 HTTPS 적용에 사용될 파일들이 제공됩니다.

우리가 사용할 파일은 크게 4가지로 존재합니다

  • root.crt.pem (Root 파일)
  • chain1.crt.pem (Chain1 파일)
  • chain2.crt.pem (Chain2 파일)
  • domain.crt.pem (서버 인증서)
  • domain.key.pem (비공개 키)

업체마다 다르지만 위의 키 들이 나누어져 있는 곳도 있고, 하나의 bundle파일로 합쳐져 있는 곳도 있습니다.

bundle파일이 존재한다면 바로 사용하셔도 되고, 저와 같이 각각 따로 존재한다면 병합하는 작업이 필요합니다.

 

순서대로 서버 인증서, Chain1, Chain2, Root 파일을 unified.domain.pem 파일로 병합하여 줍니다.

( 파일명은 크게 중요하지 않습니다)

여기서 순서가 어긋나게 되면 인증서 사용이 안되기 때문에 반드시 순서를 지켜 주시기 바랍니다.

cat doamin.crt.pem chain1.crt.pem chain2.crt.pem root.crt.pem > unified.domain.pem

 

 

 

Nginx에 HTTPS적용하기

위에서 병합한 파일 unified.domain.pem 과 domain.key.pem 을 사용하여 HTTPS를 적용시키면 끝납니다.

 

Nginx가 이미 설치되었다는 가정 하에 conf 파일을 수정하여 줍니다.

conf

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

server {
         listen 443 ssl default_server;
         ssl on // deprecated from Nginx v1.15
         server_name example.com
         ssl_certificate /directory/to/unified.domain.pem // 병합한 파일
         ssl_certificate_key /directory/to/domain.key.pem // 비공개 키
         ssl_protocols TLSv1.1 TLSv1.2;

         location / {
                root /home/ubuntu/web/dist/;
                index index.html index.htm index.nginx-debian.html;
                try_files $uri $uri/ /index.html;
          }
}

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

 

 

위와 같이 설정을 해주면 됩니다.

여기서 중요한 점은 본인의 웹 사이트가 www 를 사용한다면 이곳에서도 www 를 반드시 넣어 주어야 하며, certificate을 구매할 때 역시 domain을 물어보게 되는데 이곳에서도 www 를 반드시 입력하셔야 합니다.

저는 www 사용을 지양하고 있기 때문에 domain 구매 시 입력한 주소와 nginx에 입력되는 주소에서 제외하도록 하였습니다.

 

위의 과정이 끝났다면 sudo nginx -t 를 통해 설정 파일이 제대로 작성 되었는지 확인 후,

nginx -s reload 명령어를 통하여 설정 파일을 로드 하여 줍니다.

 

 

HTTP접속을 HTTPS로 리다이렉션 시키기

HTTPS적용은 끝났지만 기존의 사용자들은 웹 접속 기록 때문에 여전히 http로 접근을 하게 됩니다.

따라서 http로 접속되는 세션들을 HTTPS로 리다이렉션을 시켜 주어야 합니다.

Nginx conf 파일 상단에 아래와 같은 코드를 적용하여 줍니다.

conf

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

server {
listen 80;
server_name example.com;
return 301 HTTPS://$server_name$request_uri;
}

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

 

 

기타 이슈 사항들

 

- key values mismatch 이슈

아래와 같은 이슈사항이 있는 경우 비공개 키 값이 손상 되었거나 파일들을 unified.domain.pem 으로 병합을

잘못시킨 경우 나타나는 애러입니다.

SSL: error:0B080074:x509 certificate

routines:X509_check_private_key:key values mismatch

파일을 다시 다운로드 하여서 병합 과정을 다시 진행하면 해결할 수 있습니다.

 

 

 

- bad end line 이슈

PEM_read_bio_X509() failed (bad end line)

위의 이슈는 파일들을 병합하는 과정에서 줄바꿈이 안된 경우 발생하는 문제입니다.

unified.domain.pem

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

-----BEGIN CERTIFICATE-----

(Base64)

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

(Base64)

-----END CERTIFICATE-----

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

간단하게 줄바꿈을 통하여 해결할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://techlog.io/Server/HTTPS/nginx%EC%97%90-https-ssl-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0/#bad-end-line-%EC%9D%B4%EC%8A%88

 

반응형

댓글