月別アーカイブ: 2016年4月

Let’s Encryptの無料SSL証明書で常時HTTPS化

会社でLet’s Encryptというものを教えてもらった(というか、お前が試せって感じだけど)ので、うちのFreeBSD+Apache2.2なサーバーに導入してみた記録。例によってこの記録は個人的なものであり、本記録を真似・参考にされるなどした際に問題が起きても当方はいかなる責任も負わない。

追記(2017/01/11)

「証明書の更新」のコマンド例が間違っていたので修正。(オプションに追加:”–webroot -w”)

追記(2016/07/01)

Let’s Encryptコマンド(Let’s Encryptクライアント)の名称がCertbotクライアントとなり、FreeBSDのパッケージ名、コマンド名も変更となった。変更点は下記の通り。

パッケージ名

py27-letsencrypt から py27-certbot に変更された。パッケージは一度削除してインストールした。

# pkg delete py27-letsencrypt
# pkg install py27-certbot

コマンド名

/usr/local/bin/letsencrypt から /usr/local/bin/certbot に変更になった。

環境

  • FreeBSD 10.3-RELEASE
  • Apache 2.2系
  • 既にhttpで使っているサイトを対象に導入する。

FreeBSD用のCertbotクライアントのパッケージの導入

pkgで導入可能。

# pkg install py27-certbot

証明書の発行

certbotコマンドにcertonlyとつけて実行する。証明書の発行のみ行われる。

# certbot certonly --webroot -w [DocumentRootのパス] -d [ドメイン名] -m [メールアドレス] --agree-tos

ドメイン名へのアクセスチェックが行われるため、DocumentRootに一時的なファイルなどが作成され、letsencryptのサーバーから一時的なファイルへのアクセスが行われる模様。要アクセス権限。

/usr/local/etc/letsencrypt/live/[ドメイン名] 以下に証明書のファイルが生成される。シンボリックリンクになっていて、更新の度にリンク先が新しいファイルになるが、常にこのパスで参照できる。

プラグインが対応しているapache2.4系などは自動的に設定までしてくれるそうだが、apache2.4の環境で試してみたけど使い方がよくわからず、おとなしく証明書の発行を行って、設定は自分で行った。

証明書のインストール

apacheのVirtualHost設定等に下記を設定する。

  • SSLCertificateFile:cert.pem
  • SSLCertificateKeyFile:privkey.pem
  • SSLCertificateChainFile:chain.pem

apacheを再起動してhttpsでのアクセスを確認する。

証明書の更新

よくあるSSL証明書は有効期限が1年などの単位になっているが、この証明書の有効期限は3カ月なので、定期的に更新が必要。

# certbot certonly --webroot -w [DocumentRootのパス] -d [ドメイン名] -m [メールアドレス] --renew-by-default

証明書の発行にも書いたとおり、証明書へのパスの変更はないので、更新が済んだらapacheの再起動でOK。cronで毎月1日に更新するよう設定して様子見中。

httpでのアクセスをhttpsに強制リダイレクト

お手軽に.htaccessにて実施。WordPressのサイトの場合、「BEGIN WordPress」の前に書き加えた。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

mod_rewriteには明るくないが、同じ.htaccess内にRewriteEngine onが2行あっても問題ないらしい。

1つのIPアドレスで、複数のHTTPSサイトを運用する際の注意点

当サーバーの様にIPアドレスの割り当てが1つしかなく、名前ベースのバーチャルホストでHTTPS対応をしようとするとServer Name Indicationの利用が必要となる。サーバー、クライアントの双方て対応が必要だが、当サイトのサーバー(Apache 2.2系)は対応している。

クライアント側は、Windows XP以前のInternet Explorerなどで非対応となっているが、現時点でサポート継続中なOS・ブラウザではそれ程問題ない様に思われる。そのため、当ドメインも常時HTTPS強制としてみた。Windows XPなどを使っている人はせめてWindows 7あたりに更新を。