Let’s Encrypt + Apache

Let’s Encryptを使ってApacheをHTTPS化し、ついでにHTTP/2対応した手順のメモ。

環境

  • さくらのVPS v3(2G)
  • FreeBSD 10.3
  • Apache 2.4
  • 同一IP上に複数サイト

手順

認証取得

  1. 認証取得クライアントのCertbotをインストール。
    Let’s Encryptのクライアントにはいろいろな言語で実装されたものがあり、Let’s Encrypt Wikiに一覧が掲載されている。CertbotはEFF推奨のクライアント。
    portsからsecurity/py-certbotをインストールする。(当初はsecurity/py-letsencryptというパッケージだったが、名称変更された。)

    依存パッケージが山ほどあるので、すべて一緒にインストールしておく。

    なお、certbotのサイトにはApache用のプラグインがあると書かれているが、インストール後のメッセージによると「近日実装」とのこと。

    The letsencrypt plugins to support apache and nginx certificate installation
    will be made available soon in the following ports:

    * Apache plugin: security/py-letsencrypt-apache
    * Nginx plugin: security/py-letsencrypt-nginx

    近日っていつ頃なのだろう。とにかく現時点では未実装なので、手動で設定することに。

  2. コマンドラインから、認証を取得。

    複数あるサイトすべてについて、認証を取得しておく。取得した認証は、/usr/local/etc/letsencrypt/live/[サーバ名]/ の下に置かれる。live以下はシステム管理者以外参照できない設定になっている。
  3. cronに自動更新用のコマンドを登録。

    次の行を追加。実行時間は適宜変更。

    有効期限が30日を切ると自動更新される。

Apacheの設定

  1. SSLとHTTP/2のオプションを追加してApacheをビルドし直す。

    nghttp2も一緒にインストールされる。
  2. /usr/local/etc/apache24/httpd.conf を次のように編集。
    • 読み込む必要のあるモジュールの行のコメントをはずす。
    • httpd-vhosts.conf の読み込みをコメントアウトし、httpd-ssl.conf の行のコメント記号を削除する。 
    • HTTP/2を有効にする。
    • 非SSL通信をすべてSSL通信に転送する設定を追加する。
  3. /usr/local/etc/apache24/extra/httpd-ssl.conf を次のように編集する。

    SSLCipherSuiteの先頭を「AESGCM」にしておかないと、Firefoxでサイトを開けなくなる。
  4. httpd.conf の内容をチェックする。

    認証ファイルがシステム管理者にしか見えない設定のため、sudoで実行すること。一般ユーザで実行すると認証ファイルの読み込み確認でエラーとなる。
  5. Apacheを再起動。
  6. ブラウザでサイトに接続し、アドレスバーに鍵が表示されていることを確認。
  7. SSL Server Test」(またはGlobalSignのSSL Server Test)で、サイトの設定に問題のないことを確認。