let’s encrypt는 https 를 무료로 사용할 수 있게 해주고 certbot은 설치를 간편하게 해준다. 단점이 있다면 3개월 마다 갱신을 해줘야 한다는 것. 하지만 이것 마저 crontab 같은 스케줄러를 이용해서 자동화 할 수 있기 때문에 크게 문제가 되지는 않는다.

그런데 나에게 닥친 진짜 문제는 renew 하는데 오류가 발생한다는 것이다.

ImportError: No module named cryptography.hazmat.bindings.openssl.binding
Traceback (most recent call last):
  File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module>
    from certbot.main import main
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py", line 10, in <module>
    import josepy as jose
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/__init__.py", line 44, in <module>
    from josepy.interfaces import JSONDeSerializable
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/interfaces.py", line 8, in <module>
    from josepy import errors, util
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/util.py", line 4, in <module>
    import OpenSSL
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 12, in <module>
    from OpenSSL._util import (
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 6, in <module>
    from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding

설치한 환경은 기억보단 기록을 블로그를 참조하여 aws에 만든 서버이다.

Amazon Linux AMI, nginx

인터넷에 나와 있는 해결책들 이것 저것 요것 등등을 따라하면서 시도했지만 모두 실패했다.

그래서 그냥 renew 를 하지말고 그냥 처음부터 새로 설치해볼까? 라는 생각이 문득 들어서 처음부터 다시 해보니 잘 된다. 왜 그런지 모르겠으나 버전이 안맞거나 버그가 있었거나 정책이 바꼈거나 뭐 다양한 원인에 대한 추측이 든다.

해결 방법

기존 설치된 파일들 삭제

일단 기존에 설치했던 잔치랭이 같은 것들을 싹 지운다.

sudo rm -rf /root/.local/share/letsencrypt/
sudo rm -rf /opt/eff.org/certbot/ 
rm certbot-auto

certbot 재설치

certbot을 다운받아서 권한을 설정하고 실행시킨다.

sudo yum-config-manager --enable epel 
wget https://dl.eff.org/certbot-auto 
chmod a+x certbot-auto 
sudo /home/ec2-user/certbot-auto --debug --nginx 

설치 중에 기존에 넣었던 도메인 리스트를 보며주면서 어떤 것에 https 를 활성화 하겠냐고 물어보는데 나는 그냥 엔터를 때러서 모두 적용하겠다고 했다.

또 http 트래픽을 전부 https 로 redirect 를 할 것이냐고 물어보는데

전부 돌린다고 2번을 선택했다.

설치가 정상적으로 끝났고 접속도 https로 잘 됐다.

또 다른 해결책으로 하신 분이 있으면 댓글이 달렸으면 한다.