Let's EncryptでDebian+ApacheをSSL/TLS化

無料でSSL/TLSの証明書が利用できると話題のLet’s Encrypt そろそろ手軽に使えるかと思って試してみた。

Debianは8(jessie)です。

パッケージのインストール

root権限で以下のコマンドを実行し、インストール。

aptitude install certbot python-certbot-apache
Jessie backportsリポジトリを有効にする必要があるとのことなので、これだけでは動かない人もいるかも。
詳しくは参考サイト参照。

パッケージの依存関係で問題。 opensslなどの不安定版というのが気になるけど、以下を受け入れることに。

The following actions will resolve these dependencies:

      Install the following packages:
1)      libssl1.1 [1.1.0c-2 (unstable)]
2)      python-cffi-backend [1.9.1-2 (unstable)]
3)      python-cryptography [1.7.1-2 (unstable)]
4)      python-enum34 [1.0.3-1 (stable)]
5)      python-idna [2.2-1 (unstable)]
6)      python-ipaddress [1.0.17-1 (unstable)]
7)      python-openssl [16.2.0-1 (unstable)]
8)      python-pkg-resources [32.0.0-1 (unstable)]
9)      python-pyasn1 [0.1.9-2 (unstable)]
10)     python-setuptools [32.0.0-1 (unstable)]
      Keep the following packages at their current version:
11)     python-cffi [Not Installed]

unstable版を参照できるようにしておかないと解決できないかもしれない。

certbotの実行

root権限で実行。

certbot

この後は、表示に従って以下の通りに進めていく。

  • ドメイン名を入力。
  • 連絡用のメールアドレスを入力。
  • 利用規約に同意。
  • confファイルの指定。
    apacheのconfファイルにServerNameを記述していなかったので、追記して指定。
  • HTTPとHTTPSを併用する(Easy)か、リダイレクト(Secure)するか聞かれる。
    これは後でcertbotコマンドを実行すると簡単に変えられる。
    一応併用することに。

この一連の処理だけで完了、Webサイトはすぐにhttpsでアクセスできるようになる。
正直、かなり手軽で驚いた。

一応confファイルのバックアップを取って実行したが、confファイルは直接書き換えられてはなかった。
代わりに、(指定したconfファイル)-le-ssl.confというファイルが生成され、この中にSSLの設定が書かれていた。

更新の自動化

Let’s Encryptは有効期間が90日しかない。
そのため、これを定期的に更新する必要がある。

パッケージインストール時点で、以下の内容のcronが/etc/cron.d/certbotに設定されている。
そのため証明書は自動更新される。

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

ただし、以下の点に注意が必要。

  • デフォルトは有効期限30日を切らないと更新してくれない。(cronファイルに記載あり)
  • 証明書の発行は週に5回までという制限があります。(certbotの証明書更新画面に記載あり)

以上を考慮し、cronを以下のように書き換えた。

0 3 * * 7 root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e\
 'sleep int(rand(3600))' && certbot -q renew --force-renewal

変更点

  • –force-renewalとすることで有効期限を無視して更新。
  • 週に1度(毎週日曜日の夜3時)だけ更新処理を実行する。

また、apacheの再起動が必要かどうか気になったが、以下のコマンドを実行するだけで証明書が反映されることが確認できた。

certbot -q renew --force-renewal

証明書や暗号アルゴリズム

証明書で使われているアルゴリズムなどは以下の通り。

  • 署名アルゴリズム:sha256RSA
  • 署名ハッシュアルゴリズム:sha256
  • 公開キー:RSA(2048bit)

実際にブラウザが使用した暗号アルゴリズムは以下の通り。ただし、ブラウザ環境等の要因で変わる可能性あり。

  • プロトコル:TLS 1.2
  • 鍵交換アルゴリズム:ECDHE_RSA with P-256
  • 暗号アルゴリズム:AES_128_GCM

全体的に、特に気になる点はなさそうです。

SSL Server Test

↓のSSLサーバテストをしたら、Aランクでした。
https://www.ssllabs.com/ssltest/

参考

以下のサイトを参考にしました。
https://letsencrypt.jp/usage/install-certbot.html

関連記事


  1. OpenID Connect Discovery 1.0についての調査メモ
  2. Spring Security + ThymeleafでAjaxリクエストにCSRF対策トークンを適用
  3. 一部のパスだけSpring SecurityのCSRF対策を無効化する
  4. SRIによってCDN上のスクリプト改ざんを検知する
  5. OpenSSL+パスワードでファイルの暗号化/復号処理
  6. TrueCryptのレビューレポートを読んでみた
  7. Google ChromeのSSL/TLS暗号化アルゴリズム設定

comments powered by Disqus