웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > webdevetc

nginx에 SSL 사용하는 방법. comodo SSL 인증서 설치하기

Last Modified : 2019-10-22 / Created : 2017-12-16
12,065
View Count
예전에 보안 프로토콜 SSL을 사용하기 위해 가격을 알아보았는데(벌써 3-4년 전이군요...) 그때는 SSL이 매우 비쌌던 걸로 기억합니다. 물론 제가 최저가를 못찾았는지 모르겠지만요;; 그때는 비용 때문에 사용을 주저하다 말았지요.



최근 SSL이 이제는 반드시 필요한 것 같아서 가격을 알아보기 시작하였습니다. 그런데 최근에는 저렴한 SSL... 심지어 무료 제공도 있더군요; 그래서 gogetssl.com에서 Comodo Positive SSL을 구입하였습니다. 가격은 해당 사이트에 명시되어 있으며 아마 거의 최저가가 아닐까 싶네요^^; 어쨌든 SSL 구매 후 설치 인증까지 모두 완료하니 마음이 뿌듯합니다. 브라우저에 항상 안전한 웹사이트, webisfree.com으로 기억되었으면 좋겠네요!

2019년 10월 22일 현재도 아래 사이트에서 계속 ssl을 구매 후 사용하고 있습니다.
gogetssl.com




# SSL 구매부터 설치까지

일단 SSL은 https://webisfree.com처럼 보안 프로토콜을 사용하여 접근을 허용합니다. 보안에 필요한 인증 certificate 파일이 요구되며 이는 Comodo처럼 인증업체에서 제공해줍니다. 간단하게 오늘 알아볼 내용을 요약해보면 아래의 Process로 이어지게 됩니다.

  • SSL 구매하기
  • SSL 구매를 위한 지불 및 인증절차 완료하기
  • 인증서 및 Key 파일 다운받아 서버에 설치하기
  • 서버 재시작 및 확인하기

그럼 위 과정들을 하나하나 알아보도록 하겠습니다.


! SSL 구매하기

SSL 가격에 대한 부분은 위에 언급하였지만 잘찾으면 무료도 있으며 일정기간 무료도 찾으실 수 있습니다. 하지만 가격이 많이 저렴해져서 큰 부담은 없더군요...

!! 참고사항. AWS(Amazon Web Service)를 사용중이라면?
현재 AWS Cloud 환경이시라면 SSL을 무료로 사용할 수 있다고 나옵니다. (연결을 위한 소소한 금액제외)하지만 실제로 무료로 사용하기위해 절차를 거치다보니 반드시 CloudFront 또는 ELB(로드밸런싱)를 사용하는 경우에만 가능하더군요... 가격을 저렴하게 잡아도 대략 26000원 정도가 예상되었습니다. 물론 성능 측면에서는 우수해지므로 무료이긴 하지만 결국 서비스를 이용하는데 더 이상 지출은 고민이되더군요. 그래서 Comodo 외부 SSL로 결정하였습니다.


! 지불 및 인증절차 완료하기

지불은 해외 카드 및 요즘 많이 쓰는 PayPal등을 사용하면 되며 기본 지불방법으로 PayPal이 사용되더군요. 결제가 완료되면 아래의 프로세스가 필요합니다.

- CSR Configuration
- Choose Validation method
- Private/Business validation


! CSR Configuration

CSR code는 서버 인증에 필요한 암호화된 키블럭입니다. 이는 CSR Generator를 사용하여 생성할 수 있는데 페이지에 먼저 표시된 링크 Online CSR Generator를 클릭 후 이동합니다.

이동하면 사이트명, 기관명, url 및 주소 등의 다양한 정보를 입력합니다. 반드시 입력해야 필요한 암호화된 키블럭을 얻을 수 있으며 생성 버튼을 누르면 암호된 키 값이 메일과 화면에 나타나게 됩니다.

암호화 된 키를 보면 --- BEGIN 부터 ---- END 까지 코드가 나타납니다. 이를 CSR 인증에 붙여 넣어 사용하시면 됩니다. CSR정보는 해당 웹사이트에 대한 정보를 암호화하여 인증하기 위해 필요한 과정이니 올바르게 입력하시기 바랍니다. 이제 CSR Code에 생성된 정보를 를 입력하면 다음 단계로 넘어가게됩니다.


! Validation Site

이제 인증이 필요합니다. 인증절차는 해당 웹사이트, 호스트의 실제 소유주가 맞는지를 확인한다고 보시면됩니다. 몇가지 인증 방법이 있는데 특정 메일로 확인을 요청하던가(Ex. webmaster@webisfree.com) HTTP 또는 HTTPS로 특정 주소에 파일인증이 있더군요... 이 방법은 아래와 같습니다.

  • 1. 인증에 필요한 파일을 다운받는다.
  • 2. 해당 파일을 인증 경로 url에 출력되도록 저장한다. 
  • 3. 인증을 요청한다. (안될 경우 재요청)

위 과정을 거치고 실소유주로 판단되면 다음 절차로 넘어가게됩니다.


! 인증서 및 키파일 다운받아 설치하기

인증서 및 키파일은 해당 SSL 업체, Comodo에서 메일로 보내주게됩니다. 압축파일로 전달되는데 이를 받기 위해 구매 사이트에 적절한 정보를 입력후 완료해야합니다. 주소, 이메일, 이름 등등을 입력하는 과정이 필요합니다.

여기까지 끝나면 압축파일을 다운받아 이를 서버에 설치할 수 있게됩니다. 해당 파일을 서버에 위치해서 nginx(또는 Apache 등등...)에 설정이 필요합니다. 그럼 서버에 설정하는 부분을 알아봅니다.



# crt와 bundle파일 하나로 합치기 앞으로 우리는 2개의 파일을 nginx 서버에 설치할 계획입니다. 이 두 파일은 아래와 같습니다. (파일이 2개가 아닌 3개일 수도 있습니다. 만약 crt 파일이 더 많은 경우 모든 파일을 합치면 됩니다.

1. 메일로 전달받은 인증관련 압축파일 - 압축 해제 및 하나로 합치는 과정 필요
2. 메일로 받았던 Private key 파일


! 1번 - 메일로 받은 압축파일 합치는 과정

압축파일을 보면 2개의 파일로 구성되며 하나는 인증파일과 bundle파일로 구분됩니다. 이 둘을 합치는 과정이 필요합니다. 아래의 명령어가 사용되죠!
cat yoursite_com.crt yoursite_com.ca-bundle > ssl-bundle.crt

이제 생성된 ssl-bundle.crt 파일을 nginx의 인증 위치에 넣어주면됩니다. 참고로 위치는 크게 상관없으며 설정에서의 경로만 일치하면 됩니다. 일반적으로 아래의 위치에 위 번들파일과 키 파일을 복사 또는 이동하므로 여기서도 동일하게 하였습니다.


! 2번 - 메일로 전달받은 Private key 파일

메일을 확인해보면 처음 받았던 메일에 Private Key라는 내용이 있습니다. 새롭게 파일을 생성한 후 이 부분을 복사하여 붙여넣은 후 저장합니다. 이제 다음에 나올 nginx 설정에 이 파일을 위치하고 설정하면 됩니다.


* ssl 파일의 위치로 선택한 경로
/etc/nginx/ssl/
이곳에 필요한 파일은 두 개... 아까 만든 ssl-bundle.crt 파일과 Private key파일입니다. 여기서  Private key 파일은 맨 처음 CSR과 함께 받았었습니다. 이를 my-private.key라고 생성하여 추가한 경우입니다. 둘다 위 경로에 복사하거나 이동합니다. 저는 복사했습니다. :)
cp ssl-bundle.crt /etc/nginx/ssl/
cp my-private.key /etc/nginx/ssl/

복사가 끝나면 이제 서버 nginx의 config 파일만 설정하면 완료입니다!


! nginx 서버에 ssl을 설정하는 방법 nginx의 설정파일을 찾아서 인증파일키 파일을 설정해주어야 합니다. 설정파일에 아래와 같이 코드를 추가 또는 업데이트 합니다. 경로는 /etc/nginx/sites-available이라고 가정하겠습니다. 파일명이 default인 경우입니다.

@ /etc/nginx/sites-available/default
server {
  listen 443;
  server_name 127.0.0.1;
  ssl on;
  ssl_certificate /etc/nginx/ssl/your_bundle.crt;
  ssl_certificate_key /etc/nginx/ssl/your_private.key;
  ssl_prefer_server_ciphers on;
}
이제 필요한 모든 설정은 마쳤습니다. 서버를 재시작해주시고 동작 여부를 확인합니다.


! 잠깐!! 443포트로만 접근, https만 사용하는 방법은?

아래의 스크립트는 다른 기능의 동작을 실행합니다. 여기에 설정된 80 포트의 설정은 모든 80포트 접근에 대하여 https 프로토콜로 redirect를 수행하는 코드입니다.
server {
  listen 80;
  server_name 127.0.0.1;
  return 301 https://$host$request_uri;
}

이제 위 설정 코드를 nginx의 설정 파일에 추가해주면 http 접근시 자동으로 https 리다이렉트를 수행하게됩니다. 이때 주의할 부분은 http와 https를 동시 사용하는 경우.. 예를들어 하나의 서버에 다수의 웹서비스를 사용거나 기타 이유로 한꺼번에 적용하면 안되는 경우 주의가 필요합니다.


! SSL 정상동작 유무 확인 및 테스트

설정파일이 완료되면 아래 커맨드로 문법 또는 이상유무 확인이 가능합니다.
sudo nginx -t -c /etc/nginx/sites-available/configFile

여기서 configFile은 server 설정이 들어있는 config입니다. (참고로 설정 파일은 위 경로가 아닐수도 있으며 default 등의 파일이름 역시 다를 수 있습니다.) 이제 서버를 재시작하며 테스트를 수행하겠습니다.
service nginx restart

서버가 재시작하면 https로 접속이 잘 동작하는지 확인하면 완료입니다. https://webisfree.com



# 마치면서

모든 과정이 끝나는데 대략 반나절~하루 정도의 시간이 걸렸습니다. 아무것도 모르는 상태에서 하면 그렇지만 한 두번 해보면 빨리하면 1시간 정도안에 모두 가능합니다. 저는 어떤 SSL을 사야할지.. AWS의 Certificate Manager를 사용할지 여러 고민이 많았습니다.


! 혹시 동작하지 않는다면?

이 경우 nginx 설정이 잘못된 경우일 수 있습니다. 참고로 uwsgi 같은 미들웨어가 설치된 경우라도 ssl은 nginx 설정만으로도 잘 동작하더군요. 그 부분의 의심은 안하셔도 될 것 같습니다. 제 경우 SSL 구매처에 사용자 및 웹사이트 주소를 등록할때 사이트 주소를 잘못등록했더니 그때 받은 Key가 잘못 전달되어 다시 받았었습니다. 이런 부분은 아닌지 하나하나 따져가면서 확인해보시기 바랍니다.

@ log 파일 확인하기
잘모르겠다면 로그파일 확인 필수입니다. 아래 경로에서 확인해보세요.
/var/log/nginx/error.log


@ Security Group등이 설정된 경우
AWS나 기타 보안그룹이 관리되고 있고 설정된 경우라면 HTTPS에 대한 프로토콜이 추가되었는지 확인해야합니다. 만약 보안그룹에 HTTPS의 접근 제어가 안되어 있는 경우 Timeout 에러가 발생하고 위와 같이 모두 설정되었다 하더라도 접속이 안되는 문제가 나타나게 됩니다. 놓치기 쉬운 부분이니 꼭 확인하시기 바랍니다.


여기까지 모든 과정이 끝났군요... SSL은 검색엔진최적화(SEO)에 꼭 필요한 부분이므로 Site Traffic이 중요한 경우 반드시!! 필수적으로 사용해야 된다고 개인적으로 생각하는 바입니다.

Previous

git이 왜 필요하나. 반드시 써야하는가?

Previous

자바스크립트 이미지핑 기술 알아보기