想定読者
- この記事を誰かが読むことはあまり想定していません。下記のような人が検索の末にたどり着いて、正しい情報源に近づくための道しるべになればいいかな、と思っています。
- Linuxには詳しくない、Pythonもよくわからない、https接続できるサイトを安価に運営する必要からAWS(Amazon Linux)、Let's Encryptの組み合わせを使っている人
- 見よう見まねでコマンドをコピペしているが、内容を理解できていない人
- 私自身が↑こういう人なので、記事内容の正確さは保障できません。あらかじめお詫びしておきます。
Let's encryptからのメール
- 2020年1月にLet's Encryptから「Update your client software to continue using Let's Encrypt」というタイトルのメールが着信した。
- ACMEv1プロトコルを使って証明書を更新しているようだが、もうすぐ使えなくなるよ
- ACMEv2に対応したクライアント( https://letsencrypt.org/docs/client-options/ )に切り替えないと証明書の発行ができなくなるよ
Let's Encryptとcertbotの関係、certbotとcertbot-autoの関係
- Let's Encryptは「公共の利益のために運営されている、フリーで自動化されたオープンな認証局」でInternet Security Research Group(ISRG)がサービスを提供している(https://letsencrypt.org/ja/about/ )
- Certbotクライアントは、電子フロンティア財団(EFF)が提供しているACMEクライアント。
- Let's Encrypt/ISRGが提供しているわけではない。Let's EncryptのウェブサイトではCertbotを推奨しているが、他のクライアントソフトウェアも多数紹介されている。( https://letsencrypt.org/ja/docs/client-options/ )
- Certbotの旧称はLet's Encryptクライアントで、EFFのリリース( https://www.eff.org/deeplinks/2016/05/announcing-certbot-new-tls-robot )を見る限り、フリーのSSL証明書発行を目指していたEFF/Mozilla/研究者たちによるプロジェクトから認証局としてのLet's Encryptが分岐した模様。
- で、Certbot-autoはCertbotのラッパーで、Certbotの実行と依存関係管理を行う。←ここをよく理解せずに、かなり無理やり導入したCertbotを直接叩いて実行していた(=約2年間バージョンアップせず)のが、今回苦労した原因。
Certbot-auto最新版の取得、実行→エラー
- Certbot-autoの導入手順については多数記事があるのでそちらを参照ください。私は「AWS EC2のAmazon LinuxでLet's Encryptのサーバ証明書を取得する( https://qiita.com/kanehara/items/a2c322acc3d2a96ff42d )」を参考にしました。
- で、実行するとなんかエラーが出る。
- Certbot-autoの実行時にAmazon Linuxをサポートしていないので云々と出るので、--debugオプションをつける
- Pythonのバージョンが古いせいかと思い、Python3.6をインストールするも、Certbotの初回実行時にPython2.7の環境を構築しようとして失敗する。
- /usr/bin/virtualenvが/usr/bin/virtualenv-2.7のシンボリックリンクになっていることが問題と判断。
- Pythonは複数バージョンがインストールされていることを前提に、仮想環境を構築してバージョンを使い分けることが一般的、らしい。
- 結果、仮想環境ソリューションもまた複数が乱立(と言ったらきっと怒られる)していて、このソリューションはこのバージョンでは使える使えない、であるとか、このソリューションは非推奨になって久しい、などの情報もまた多い。
- そもそも「Amazon Linuxではpython2系を置いておかないとまずい」という記事を複数目にしたため、Python3.6を追加でインストールしている。
- Amazon Linux 2であればこの問題が起きないのでは、と、1インスタンス立ち上げてみたのは秘密だ。
- でもAmazon Linux 2でもCertbotを動かすのは一筋縄ではいかないらしい。
- 古い記事「Amazon Linux2でLet's Encrypt使おうとしたらコケた話( https://qiita.com/MysteriousMonkey/items/f26316447c1ff390ce21 )」
- 新しい記事「Amazon Linux2とLet's EncryptでSSL対応サーバを0から爆速構築( https://qiita.com/MysteriousMonkey/items/4d3d857c0e68d4bfff39 )」
とりあえず解決(後で問題が起きるかも)
- /usr/bin/virtualenvが/usr/bin/virtualenv-2.7のシンボリックリンクになっているのが問題なので
- virtualenv-3.6をインストール
- 参考記事:「AmazonLinuxでデフォルトで使えるpython36-virtualenvパッケージを使ったPython3.6 venv環境の構築( https://www.saintsouth.net/blog/construct-python36-venv-by-virtualenv-on-aws-amazon-linux/ )」
- シンボリックリンクの張り替え
- Certbot-autoの実行
- ウェブサーバーの再起動
- virtualenv-3.6をインストール
sudo yum install python36-virtualenv
sudo unlink /etc/alternatives/virtualenv
sudo ln -s /usr/bin/virtualenv-3.6 /etc/alternatives/virtualenv
sudo certbot-auto renew --debug
sudo service httpd restart
以上
- 後で問題が起きたら更新します。