Apacheでletsencryptを使う

Let’s Encryptとは

Let’s Encryptは無料で使えるSSL認証局です.
Let’s Encryptで証明書を取得し,Apacheで動作させるまでの方法を書き残しておきます.

動作環境は,

  • Ubuntu 12.04
  • Apache 2.4.12

証明書の取得

クライアントの導入

githubからクライアントを持ってきて,依存関係の確認などを行います.
3行目でヘルプを確認していますが,このときに依存関係の確認・更新などを行うようです.

1
2
3
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
sudo ./letsencrypt-auto --help

証明書の取得

今回,証明書はサブドメインごとに取得します.
なお,80番ポートを使うので動作中のApacheは停止しておきます.

1
2
3
sudo service apache2 stop
./letsencrypt-auto certonly --standalone -d www.taniho.net
./letsencrypt-auto certonly --standalone -d blog.taniho.net

初回はメールアドレスなどを入力させるダイアログが出てくるので,いい感じに入力していきます.

IMPORTANT NOTES:

  • Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/(ドメイン)/fullchain.pem. Your
    cert will expire on (有効期限). To obtain a new version of the
    certificate in the future, simply run Let’s Encrypt again.

この画面が出れば取得完了です.
見れば解ると思いますが,Let’s Encryptで取得した証明書は有効期限が90日しかありません.
証明書の更新は次のコマンドを打つことで行えます.
また,更新後にApacheを再起動する必要があります.

1
letsencrypt-auto renew --force-renew

今回取得した証明書は,/etc/letsencrypt/live/(ドメイン)/の中に入っています.

Apacheの設定

とりあえず

Apache2.4.8以降では,それ以前と設定の仕方が変わっているので気をつけてください.
とりあえず,https://blog.taniho.net/にアクセスできるように設定してみます.

1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:443> 
ServerName www.hoge.net
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/blog.taniho.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/blog.taniho.net/privkey.pem
</VirtualHost>

1
sudo service apache2 restart

設定を有効化する

/etc/apache2/site-availableにsite設定を書いたら,次のコマンドで有効化,無効化することができます.

1
2
a2ensite (設定ファイル名)
a2dissite (設定ファイル名)

同様に,Apacheのモジュールを有効化・無効化させる場合は次のコマンドを使います.

1
2
a2enmod (モジュール名)
a2dismod (モジュール名)

今回はmod_sslを有効化する必要があるので,次のコマンドを叩いておきます.

1
a2enmod ssl

httpに来たアクセスをhttpsにリダイレクトさせる

必ずhttpsでアクセスさせたい場合や,その逆の場合もあると思います.
ひとまず,http://blog.taniho.net/にアクセスされた場合にhttpsに転送する設定をまとめておきます.
VirtualHost設定の中に次の内容を書きます.

1
2
3
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://blog.taniho.net$1 [R,L]

参考

CentOS 7 + Apache 2.4 で Let’s Encrypt の証明書を導入する手順
Let’s Encrypt サーバー証明書の取得と自動更新設定メモ
apacheでhttpへのアクセスをhttpsへ自動リダイレクトする