はじめまして、ビジネス開発室の『ab』です。
今回は、商用利用も可能な無償の証明書発行サービス『Let’s Encrypt』を紹介したいと思います。
弊社のとあるプロジェクトで使用しているredmineはAWS上でセキュアに動いてはいるのですが、
SSL証明書はオレオレ証明書を使用していました。
なので、証明書の有効期限を気にしながら、発行(更新)時はいくつもコマンドを叩いて、確認して・・・
といったとってもメンドクサイ運用をしていました。
そんな面倒な作業から解放されたい・・・
というか、そもそも「オレオレ」ってどうなのよ・・・?
というわけで、それら全てを解決してくれそうなLet’s Encryptを導入してみました。
同じようにそんなモヤモヤから解放されたい!と思っている方の参考になれば嬉しいです♪
簡単ではありますが、メリット・デメリットについて。
冒頭でも紹介しましたが、2016年4月12日から、商用利用も可能となった無償の証明書発行サービスです。
導入も簡単で、gitからLet’s Encryptをダウンロードするだけです。
あとは、Let’s Encryptを呼び出すコマンドをたたくだけで、証明書の発行が出来てしまいます。
そして、証明書更新の自動化も可能です。
これらが無償で提供されているのです。なんて素敵なサービスなのでしょう♪
と、いいところばかり紹介してきましたが、デメリット(?)ももちろんあります。
例えば、Let’s Encryptはドメイン認証のみとなるので、手軽な反面、
他の認証方法(企業実在認証やEV認証)と比較すると、一番レベルの低い認証しか出来ません。
などなど。
その他、詳細に関してはサイトをご覧ください。
【本家サイト】https://letsencrypt.org/
【Let’s Encrypt 総合ポータル】https://letsencrypt.jp/
EC2にてSSL証明書を発行~自動更新するまでの手順です。
OSはAmazonLinux、WebサーバはApacheを利用しています。
- Let’s Encryptの導入
#任意のフォルダに移動して、Let’s Encryptをgitからダウンロード
#ここでは/home/ec2-userにダウンロードすることとします
cd /home/ec2-user
git clone https://github.com/certbot/certbot
#ダウンロードしたフォルダ内でテスト実行
cd certbot
sudo ./certbot-auto –debug※yumなどのパッケージ管理システムを利用したアプリなどのインストールやアップデートが、自動的に行われます。厳格にパッケージのバージョンを管理している場合はご注意ください。 - 証明書発行
sudo ./certbot-auto certonly \
–webroot -w ドキュメントルート \
-d ドメイン名 \
-m メールアドレス \
–renew-by-default –agree-tos –debug - Apacheの設定ファイルを更新
#Webサーバの設定ファイルを編集
sudo vi /etc/httpd/conf/httpd.conf#各証明書の配置場所を設定
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem※証明書発行した際に、/etc/letsencrypt/live/ドメイン名配下に各証明書のシンボリックリンクが作成されます。
- Webサーバの再起動
service httpd restart - Cronの設定
#毎月1日の1時に強制的に更新をします。
0 1 1 * * root /home/ec2-user/certbot/certbot-auto renew –force-renew && service httpd reload※証明書の有効期限は90日です。 とても簡単ですよね!?
と、手順だけ見るととてもスムーズにいったかのようですが、ところどころでつまづいてます。
環境によっては、上記手順ですんなりいくこともあるのでしょうけど・・・・
弊社の、「とあるプロジェクト」環境では残念ながらスムーズには行きませんでした。。。
つまづいた箇所も続けて書きますので、何かの参考になればと思います。- テスト実行時、virtualenvコマンドがないよ、的なエラーが。
【エラー(一部抜粋)】
Package 1:mod_ssl-2.2.31-1.7.amzn1.x86_64 already installed and latest version
Nothing to do
Creating virtual environment…
./certbot-auto: line 558: virtualenv: command not foundvirtualenvがバージョン違いで複数インストールされていて、かつ古いバージョンのvirtualenvが選択されていたことが原因でした。
update-alternativesでバージョン(コマンド実行パス)を管理し、妥当なバージョンに切り替えることで解決しました。 - 証明書発行時、下記エラーが!!
【エラー(一部抜粋)】
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A record(s) for that domain
contain(s) the right IP address.ポート80を解放していなかった事(AWSのセキュリティーグループの設定)が原因でした。
ちなみに、Standalone プラグインの TLS-SNI-01 Challenge を使用することでポート80を解放しなくても実行可能となるらしいです。
上記、試す機会があればまた追記します。
これで、今後の手動による証明書の更新作業がなくなりました!
そしてなぜか、redmineが早くなりました。
ハッキリとした原因は不明ですが、やはりオレオレが原因だったのでしょうか???
今回はEC2での自動更新までを記事にしましたが、ELBでも同様に自動更新が可能です。
ただし、EC2よりも手間はかかりますが…。
また、需要と機会があれば記事にしたいと思います。 - Webサーバの再起動