티스토리 뷰

원문 : startssl.com의 공짜 SSL인증서를 NGINX에서 사용하기

 

요즘에는 연동 서비스를 개발하기 위해서 필수적으로 https 프로토콜을 요구하는 곳들이 많다.

공인 ssl 인증서를 받으려면 꽤 많은 돈이 필요하니, 가난한 스타트업에서 테스트 서버를 만들기 위해 도메인 마다 일일이 인증서를 지를수도 없고.. startssl.com이라는 공짜 인증서를 배포하는 고마운 사이트가 있다.

가입하고 인증메일을 처리하면 ssl인증서를 만들 수 있는데, 문제는 nginx에서 startssl.com의 인증서를 그대로 적용하면 문제가 생긴다는 것이다. 꽤나 삽질하다가 NGINX에 적용하는 방법을 찾았다.

 

 

 


 

1. 먼저 openssl을 이용해서 서버에서 키 파일을 만들어준다. (openssl이 설치돼있다는 전제로.. )

$ openssl genrsa -des3 -out example.com_secure.key 4096


2. 위에서 만든 key파일로 csr을 만든다.

$ openssl req -new -key example.com_secure.key -out example.com.csr


3. 그리고 나서 startssl.com에 로그인하고 wizard로 들어가서 인증서를 생성한다. 인증서 암호를 물어보는 화면이 나온다. 우리는 위에서 openssl로 csr 파일을 만들었으므로 skip을 누른다. 그리고 위에서 생성한 csr파일을 붙여 넣는다.

그러면 pem형식의 인증서 파일이 생성된다. 복사-붙여넣기로 example.com.pem을 만든다.


4. startssl의 루트 인증서를 다운 받는다.

$ wget http://www.startssl.com/certs/ca.pem
$ wget http://www.startssl.com/certs/sub.class1.server.ca.pem 


5. 기존 키 파일에서 암호를 없앤 새로운 키 파일을 만든다. 이래야 nginx실행할때마다 암호를 물어보는 일이 없어진다.

$ openssl rsa -in example.com_secure.key -out example.com.key

 

이미 key와 crt파일을 생성해서 저장한 경우라면

 

6. 도메인에 해당되는 인증서와 startssl의 루트 인증서를 병합시킨다.

$ cat example.com.crt sub.class1.server.ca.pem ca.pem > example.com_chain.pem

그렇지 않다면

6. 도메인에 해당되는 인증서와 startssl의 루트 인증서를 병합시킨다.

$ cat example.com.pem sub.class1.server.ca.pem ca.pem > example.com_chain.pem


7. 마지막으로 nginx 설정에서 https부분을 넣어준다.

server {
    listen 443 default_server ssl;
    ssl on;
    ssl_certificate /etc/nginx/ssl/example.com_chain.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_session_timeout  5m;
    ...
}


그리고 나서 nginx -s reload 등으로 서버를 재실행해주면 된다. pem파일에서 에러가 나는 경우가 있다. (주로 end of line 어쩌구 하는..) 이 에러는 위에 병합하는 과정에서 생기는 문제인데, pem파일을 열어서,

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

이렇게 돼있는 부분이 있다면,

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

이렇게 바꿔주면 된다.

그러면 깔끔하게 https로 접속되게 될 것이다.


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크