概要
Let's EncryptはGoogleやCiscoなどメジャーな企業がスポンサーをしている信頼性のあるオープンで無料のTSL(SSL)認証局(CA)。
しかも、ツールが提供されており、簡単に証明書をインストールできる。
つまり、簡単に無料でオレオレ証明書を卒業して、サーバでhttpsが使えるということ!
ここでは、ubuntu x apacheを前提にする。
手順
- はじめはマニュアルでcertbot-autoを実行してインストール。
- あとはrenewサブコマンドをcronで毎日実行する。
これで、毎日のrenew実行で、サーバにインストールした証明書の内、更新がものだけ更新してくれる。
準備
対象となるドメインがhttpでアクセス可能である必要がある。
細かいことは、この記事を見ている時点でわかっていると思うので割愛する。
- 対象のドメインが目的のサーバに向くようにレコードを設定する
-
/etc/apache2/sites-available
に通常のhttpでの設定ファイルを作成 - サイトを有効にする
$ sudo a2ensite 000-your-site.conf
- アパッチを再起動する(なぜか
restart
ではだめだった)
$ sudo apache2ctl stop
$ sudo apache2ctl start
ブラウザでドメインにアクセスして配置した.htmなどが表示されればOK。
ここからが、本題。
証明書のインストール
ツールのインストール
どこでもいいが、とりあえずホームディレクトリにインストールする
$ cd
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
証明書インストール&設定修正
全部自動でやってくれる!
$ ./certbot-auto --apache
/etc/apache2/sites-available
からサイトを自動検出するので、SSLを導入したいサイトに*
をつける。
スペースキーで*
のON/OFF切り替えが可能。
easyとsecureのどちらでやるか聞かれるが、secureを選んでも特にやることはない。
これでhttpsでアクセスできるようになった。
下記のURLでd=
以降にSSLを導入したドメインを指定してブラウザで読み込むと、httpsのステータスレポートを見ることができる。
https://www.ssllabs.com/ssltest/analyze.html?d=your-site.com
うん、安全そうだw
ちなみに、/etc/apache2/sites-available
の.confファイルを見ると、httpsの設定のための修正がされていることがわかる。もし、勝手にファイルを修正されたくなければ、certbot-auto
コマンドにcertainly
サブコマンドを付けてやれば、設定を変更せずに証明書のインストールだけやってくれる。
証明書の自動更新設定
certbot-auto renew
コマンドをcronで定期的に実行することで、証明書を自動更新してくれる。
有効期限が30日以下の証明書のみを判別して更新してくれる。
crontab -e
コマンドで下記のように設定する。
この例では毎日12:34にcertbot-auto
コマンドを実行させている。
34 12 * * * /home/ubuntu/certbot-auto renew --quiet --no-self-upgrade >> /tmp/cron.log 2>&1
自動更新設定はこれだけ。
cronのトラブルシューティング
話がそれるがハマったので注意点を幾つか。
- Linuxディストリビューションによっては、
crontab
の設定で出力をリダイレクトしないと実行されない場合がある。
上記の例では2>&1
でエラーを標準出力にリダイレクト、標準出力を/tmp/cron.log
に吐き出している。 -
/etc/letsencrypt/cli.ini
にドメインなど、設定を記述することで非インタラクティブなインストールが可能だが、ここでドメインを指定してしまうと、今のバージョンではcertbot-aut renew
でエラーになってしまう(参考)。なので、.ini
ファイルを使用することはおすすめしない。 - ログは
/var/log/letsencrypt/letsencrypt.log
に吐かれるので、動作しないようならこちらをチェック。