SSL 발급받기

SSL 인증서를 구입하기 위해 저렴한 사이트들이 많다. 나는 GOGETSSL에서 인증서를 구입했다.

SSL 인증서 발급받기 위한 자세한 사항은 아래의 링크에서 참고 하기 바란다.

GOGETSSL에서 인증서 발급받기

요점을 정리하면, 인증서 등록시 CSR Generate 를 클릭하게 되면 CSR Code와 Server private key가 생성이 된다.

private key에 필요한 정보를(적용할 도메인 url) 입력한 다음 단계를 진행하다 보면 도메인 소유 인증을 진행한다. 각자 도메인을 구입한 사이트에서 E-mail, DNS, HTTP, HTTPS 기반의 인증방식을 제공하니 메뉴얼대로 진행하면 된다.

(주의해야할 점은 기존의 private key는 한번 잃어버리면 다시 재발급이 안된다. CSR/private Key pair을 다시 생성해야 한다.)

나는 DNS 인증방식으로 진행하였고 제공된 CNAME 코드로 DNS 서버의 CNAME Recorde를 등록하였다.

입력한 인증 정보를 통해 인증 진행후 인증서 파일을 다운로드를 받을 수 있다.

Nginx에 적용하기

/etc/nginx/site-available 폴더에서 server block 이 설정된 파일을 들어가보자.

기본으로 아래와 같이 되어 있다. 아래의 코드의 의미를 살펴 보면 80번 포트로(HTTP프로토콜의 기본 포트) example.com 도메인으로 요청이 들어오면 해당하는 location에 명시된 행위를 하겠다는 것을 의미한다.

server {
  listen 80;
  server_name example.com;

  location / {

  }
}

우리는 SSL을 적용해야 하기 때문에 HTTPS의 기본포트인 443 포트를 적용해야 한다.

server {
  listen 443;
}

그리고 SSL 인증서 발급시 생성된 key 파일과 crt 파일을 서버에 위치시키고 다음과 같이 작성한다.

server {
  listen 443;
  server_name example.com
  root html;

  ssl       on;
  ssl_certificate /etc/nginx/ssl/my_domain.crt;
  ssl_certificate_key /etc/nginx/ssl/my_domain.key;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 5m;

  location / {

  }
}

보안을 위해 nginx에 ssl폴더에 넣었지만 보안을 위해 루트 권한 설정을 한다.

$ sudo chown -R root:root /etc/nginx/ssl;

이제 https://example.com 으로 접속하게 되면 접속이 되는 것을 확인할 수 있다.

Chain Error Issue

일반 최신 웹 브라우저에서 접속하면 정상적으로 인증이 통과되어 접속이 된다. 하지만 구형 웹브라우저나 일부 모바일기기의 웹뷰에서는 접속이 안되는 경우가 있다. 이를 위해 먼저 체인 인증서에 대해 알아보자

체인 인증서란?

루트 인증서와 발급 받은 서버 인증서 사이에 존재하는 인증서이다. 즉 루트 인증서와 서버 인증서 사이를 중개, 연결해준다는 것이다. SSL 동작 방식에 의거하여 웹 브라우저에서 CA라는 Root Certificate 에서 통과된 인증서인지를 확인 후 접속을 허락해준다.

근데 이 체인 인증서라는게 SSL 초장기에는 루트 인증서에서 바로 서버 인증서를 발급하였지만, 최신에는 기술 환경 변화에 맞게 체인인증서 발급 체계를 가지고 있다.

따라서 최신 웹 브라우저의 경우에는 최신 루트 인증서 뿐만 아니라 체인 인증서까지 보유하고 있지만, 구형 웹 브라우저나 일부 모바일 기기에서는 접속이 안되는게 이러한 이유가 존재한다.

체인 이슈 해결

서버쪽에서 명시적으로 현재 서버인증자가 누구이며 어떤 발급 단계를 통하였는지 알려주면 되는 것이다.



위 사진에서 전체 zip 파일을 다운 받는다. 그러면 내부에 3가지의 파일이 존재할 것이다.

my_domain.crt, AddTrust_External_CA_Root.crt, COMODO_RSA_Certification_Authority.crt

nginx CA 인증서를 명시할 지시자 없으므로 다음과 같이 SSL 인증서와 CA 인증서를 하나의 파일로 만들어야 한다.

$ cat my_domain.crt AddTrust_External_CA_Root.crt COMODO_RSA_Certification_Authority.crt > ssl-bundle

그리고 가끔씩 순서를 잘 못 맞춰서 key와 crt파일이 매칭이 되지 않는 경우가 있는데 이 때는 sslshopper 에서 매칭 여부를 확인할 수 있다.

이제 SSL 인증서와 CA 인증서를 하나로 합친 파일을 nginx에 등록시키자.

server {
  listen 443;
  server_name example.com
  root html;

  ssl       on;
  ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
  ssl_certificate_key /etc/nginx/ssl/my_domain.key;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 5m;

  location / {

  }
}

자, 그러면 체인 문제가 해결되었는지 sslshopper에서 확인해보자.

그림처럼 오른쪽에 Server hostname을 입력하고 확인해 보 수 있다.

'IT > BackEnd' 카테고리의 다른 글

Mysql UDF 작성  (0) 2019.03.20
Crawling을 위한 Selenium, Chrome Driver 설치  (0) 2018.07.15
SSL 인증서 발급 및 Nginx 적용. 그리고 체인 이슈 해결하기  (0) 2018.02.28
Atom Remote-FTP package 소개  (0) 2017.11.02
JWT  (0) 2017.09.27

+ Recent posts