CentOSにLet's Encryptを入れて自動更新できるようにする【無料SSL/Apache】



Googleが推奨しているように、だんだんSSLは必須な世の中になってきた。
しかし趣味でホームページをやっていたりする人にとっては、有料のSSLを導入するのはハードルが高いだろう。そんな中、無料で使えるSSLが登場した。その名も「Let's Encrypt」だ。
このSSLはありがたいことに無料で使えるのだが、一つ注意しなければならない。
それは3か月に一度、更新してあげなければならないことだ。
しかしその更新も自動化できるツールが存在する。
この記事では「Let's Encrypt」を導入し、自動更新するまでに必要だった方法を詳しく説明していく。





CentOSにLet's Encryptを入れた環境


今回、Let's Encryptを導入した環境はこちら。

  • Apacheのバージョンは2.2.x
  • オレオレ証明書を既に使っている
  • 443ポートは解放済み
  • バーチャルホストで運営している
  • CentOS 6.x

この条件下で作業を行なっていく。
操作はSSLからrootでログインし、/root ディレクトリで操作した。


curlのアップデート

今回いろいろプログラムをインストールしていくが、curlが古いとうまくいかないので事前にアップデートしておこう。
$ yum update curl






Certbotの設定、httpsでアクセスできるようにする


Let's encryptを簡単に管理できるようにしてくれるプログラムが Certbot である。

とりあえずhttpsでアクセスできるようにするまでの手順は次の通り。

  • 1. certbotをダウンロード
  • 2. Apacheを停止
  • 3. certbotを使って鍵を作成
  • 4. Apacheに鍵のパスを記述
  • 5. Apacheを再起動

それでは手順を追って説明してく。

Certbotのインストール

Certbotをgitでクローンする。

$ git clone https://github.com/letsencrypt/letsencrypt



Apacheを停止

Apacheを止めないと証明書を作れないので、作業する前に停止しておく。
$ /etc/rc.d/init.d/httpd stop



Certbotを使って鍵を作成

先ほどクローンした letsencrypt ディレクトリへ移動する。

letsencrypt-auto コマンドがあるので、それを使って鍵を作っていく。
hogedomain.com の部分は自分のサーバーのドメインに置き換えること。

$ ./letsencrypt-auto certonly -a standalone -d hogedomain.com


鍵を作るにあたって、いくつか質問されるが難しいことはないのでここでは省略する。
さて、これで /etc/letsencrypt/live/hogedomain.com/ 内に鍵が作られたと思う。

$ ls /etc/letsencrypt/live/hogedomain.com/
README  cert.pem  chain.pem  fullchain.pem  privkey.pem



Apacheに鍵のパスを記述

先程の鍵の場所を、Apacheの ssl.conf に記述する。

$ vi /etc/httpd/conf.d/ssl.conf

## 以下のように書き換える
SSLCertificateFile /etc/letsencrypt/live/hogedomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hogedomain.com/privkey.pem



Apache 再起動

以上でLet's Encryptが導入できたので、停止していたApacheを再起動しよう。
$ /etc/rc.d/init.d/httpd start

自分のドメインにhttpsでアクセスできるか確認しよう。
証明書もLet's Encryptとなっているはずだ。





サブドメインでもLet's Encryptを使えるようにする


サブドメインでもSSLを使えるようにしたい場合は、先程の鍵をサブドメイン毎に作り、設定してあげる必要がある。

まずはサブドメインの鍵をつくる。
$ ./letsencrypt-auto certonly -a standalone -d sub.hogedomain.com


Apacheの virtualhost.conf を次のように書き換える。
$ vi /etc/httpd/conf.d/virtualhost.conf

##以下を追加
<VirtualHost *:443>
    ServerName sub.hogedomain.com
    DocumentRoot /somewhere/hogedomain/sub

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/sub.hogedomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/sub.hogedomain.com/privkey.pem

    ErrorLog logs/sslvirtual_error_log
    CustomLog logs/sslvirtual_access_log combined env=!no_log
   NameVirtualhost *:443
</VirtualHost>


これでApacheを再起動すれば、https でサブドメインにアクセスできるようになっているはず。


.htaccessでhttpsへリダイレクト

ちなみに、httpでアクセスしても自動でhttpsへリダイレクトするようにするには .htaccess に次のように書くことで可能となる。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]



faviconでエラー

ブラウザーが小さい警告表示を出している場合、faviconが原因の可能性がある。
ブラウザーがfaviconをリクエストすため、faviconを設置していないとエラーを吐くのだ。
適当にfaviconを設置すればエラーはなくなる。






自動更新の設定


最初に述べた通り、Let's Encryptは3か月しか有効期限がないので更新してあげる必要がある。

certbot-auto renew というコマンドで証明書を更新できるようになっている。
renewは、すべての証明書を更新するコマンド。--post-hookオプションで指定したコマンドは、renew後に実行される。ただし、renewは期限が迫らないうちは、実行がスキップされ、その場合はpost-hookも実行されない。


しかし実際やってみたところ、このプログラムはpython2.7系でないとうまく動作しなかったのでまずはCentos6でPython2.7を使えるようにしておく。

Centos6でPython2.7を使えるようにするまで

CentOS6のyumではPython2.6までしかサポートされていない。
Python2.7を使えるようにするにはSCLを使うことになる。

SCLとは、サポートされていないアプリケーションを実行可能なようにしてくれるもの。つぎのコマンドでインストールしておこう。

$ yum install centos-release-scl-rh

さらにPython2.7もインストールする。
$ yum -y install python27

実際に使うときはこんな感じ。
$ scl enable python27 '実行したいプログラム'



自動更新の設定

$ scl enable python27 './certbot-auto renew'で証明書が更新されるかテストする。
証明書を更新する場合はApacheを停止しておくことをお忘れなく。

問題なければcronに登録して自動更新させていく。
$ vi /etc/cron.d/letsencrypt

00 04 15 * * /etc/rc.d/init.d/httpd stop && scl enable python27 '/usr/bin/certbot-auto renew' && /etc/rc.d/init.d/httpd start


ちなみにcronの記述は、分 時 日 月 曜日 <実行コマンド>となる。



以上でCentOSにLet's Encryptを入れて自動更新できるようにするまでの説明を終わるが、Let's Encryptの自動更新がうまくできなかった場合は、とりあえずエラーログを確認してみよう。
$ cat /var/log/letsencrypt/letsencrypt.log


SSLをはじめよう ~「なんとなく」から「ちゃんとわかる!」へ~ はじめようシリーズ

こんな人向けの本です。よく分からないけど言われるがままにSSLの設定をしている人/SSLとTLSの関係性がよく分かっていない人/SSL証明書がいったい何を証明しているのか知らない人/SSLは聞いたことがあるけどTLSは知らないという人/これからシステムやプログラミングを学ぼうと思っている新人/証明書の購入や設置はしたことがあるけどSSLはあまり分かっていない人/サイトをHTTPS化しなきゃ!と思っている人

Kindle

サーバ構築の実際がわかる Apache[実践]運用/管理

本書はApacheの基礎から導入をはじめ、設定ファイルであるhttpd.confの解説、拡張モジュールを解説しています。また実際にHTTPサーバを構築、運用する際に必要な、パフォーマンスチューニング、セキュリティ対策、大規模運用(負荷分散や高速化)、WebDAV機能や、コンテンツフィルタリング、トラフィック量やコネクション数の制御など最新の情報を解説、実際にHTTPサーバを運用していくのに必ず役に立ちます。

Amazon

あなたにおすすめ