2016년 8월 24일 수요일

Django의 runserver_plus에 올린 Let's Encrypt의 SSL certificate

개발용이지만 https가 필요해서 RunServerPlus를 사용하고 있다. 문제가 생긴 것은 외부의 결제 시스템에서 개발 서버에 접속할 때 아래와 같은 에러가 난다는 것.

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

결제 시스템쪽의 JVM을 업데이트하면 좋겠는데, 우리쪽에서 처리를 하라고 연락이 왔다.

https://www.geocerts.com/ssl_checker에 접속해서 certificate를 확인해보라며. certificate를 확인해보니, certificate chain을 확인할 수 없단다.


runserver_plus에는 Certificate chain file을 지정하는 옵션이 보이지 않는다. --cert만 지정할 수 있다. (그런데, 이 옵션이면 되는 것이었다)

Nginx + Gunicorn 또는 uWSGI로 가면서 chain file을 지정하는 방법이 있겠지 하고, uwsgi 설치하고, nginx 설정하고 nginx의 옵션을 알아보는데, crt 파일에 chain path 정보를 같이 넣은 것도 동작한다는 것을 알게 되었다-_-

Let's Encrypt에서 certificate 갱신하면 만드는 파일들이 있다.

  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem

위의 파일들 중에서 cert.pem을 crt 파일로 symlink해서 사용하고 있었는데, chain 정보도 들어 있는 fullchain.pem을 crt 파일로 symlink한 후 Django를 올리니..


잘 된다.