Let’s EncryptでSSL証明書インストールと自動更新を設定してみた

Lets Encrypt

ちょっとした SSL 対応のサイトを用意したい事案が発生したので、今まで気になっていたけどよく知らなかった Let’s Encrypt を試してみました

やりたいこと

  • http://www.example.com のサイトを https://www.example.com でアクセスできるようにする
  • SSL 証明書に Let’s Encrypt を使用する

なお、試した環境は下記の通りです。

  • Cent OS 6.3
  • Apache 2.2.15
  • www.example.com は VirtualHost で運用

Let’s Encrypt のインストール

インストール

まずは、Let’s Encrypt のインストールから。

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

なお、letsencrypt-auto コマンドのタイミングで依存パッケージをインストールするため yum update が実行されるようです。

自分の環境の場合、インストール中にエラーが出てしまいました。

./letsencrypt-auto: line 460: virtualenv: コマンドが見つかりません

python の実行環境を管理する virtualenv というツールが必要だそうです。

virtualenv について調べていたら、どうも Python を今入っている 2.6 から 2.7 にバージョンアップしないとダメそうな模様。

というわけで先に Python のバージョンアップをします。

# 現在のバージョン確認
$ python -V
Python 2.6.6

# SCL(Software Collections)をインストール
$ sudo yum install centos-release-SCL

# Python 2.7 と scl-utils をインストール
$ sudo yum update
$ sudo yum install scl-utils python27 python27-scldevel

# Python 2.7 を有効化
$ scl enable python27 bash

# バージョンアップされたことを確認
$ python -V
Python 2.7.5

Let’s Encrypt のインストールを再開します。

$ ./letsencrypt-auto --help

またエラーが出ました。python のライブラリが見つからない、といった内容のようです。

/path/to/.local/share/letsencrypt/bin/python2.7: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

libpython2.7.so.1.0 のシンボリックリンクを /lib64 下に作ります。

$ which python
/opt/rh/python27/root/usr/bin/python
$ ldd /opt/rh/python27/root/usr/bin/python
	linux-vdso.so.1 =>  (0x00007fff5f5ff000)
	libpython2.7.so.1.0 => /opt/rh/python27/root/usr/lib64/libpython2.7.so.1.0 (0x00007f49e8ad1000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f49e88ab000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f49e86a7000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f49e84a4000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f49e821f000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f49e7e8b000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f49e8e95000)
$ sudo ln -s /opt/rh/python27/root/usr/lib64/libpython2.7.so.1.0 /lib64/

Let’s Encrypt のインストールを再開します。

$ ./letsencrypt-auto --help

今度はインストールできました。

SSL証明書作成

次に SSL 証明書を作成します。

Apache が起動しているとエラーが起きるようなので一旦停止します。

$ sudo /etc/rc.d/init.d/httpd stop

www.example.com ドメインの証明書を作成します。

$ ./letsencrypt-auto certonly -a standalone -d www.example.com

コマンド実行後、メールアドレスの入力画面、利用規約の同意画面が出るのでそれぞれ入力して進みます。

最後に以下のようなメッセージが表示されます。SSL証明書が作られたようです。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.example.com/fullchain.pem. Your cert
   will expire on 2016-07-07. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.

表示されたメッセージにあるディレクトリの中を確認します。

$ sudo ls /etc/letsencrypt/live/www.example.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem

Apache の設定

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

# 下記記述を設定
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
$ sudo vi /etc/httpd/conf.d/vhost.conf

# 下記記述を設定
NameVirtualhost *:443

<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot /path/to/www.example.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
</VirtualHost>

Apache を起動します。

$ sudo /etc/init.d/httpd start

ブラウザからサイトにアクセスしました。ちゃんと SSL が設定できたようです。

SSL証明書

SSL証明書

Let’s Encrypt の自動更新設定

Let’s Encrypt の証明書は有効期限が3ヶ月という制限があります。期限が来る度に更新するのは大変なので、自動更新処理を設定します。

0 3 1 * * /etc/init.d/httpd stop; /path/to/letsencrypt/letsencrypt-auto certonly -a standalone -d labo.go-sign.info --renew-by-default; /etc/init.d/httpd start

root の cron に、毎月1日3時に自動更新処理が行われるようにしてみました。

感想

使ってみるまでは無料という表面的な特徴しか把握してませんでしたが、それ以上に業者と面倒なやり取りすることもなくコマンドラインで操作が完結する手軽、思い立ったらすぐに証明書を取得できるスピード感、といった使い勝手の良さにとても驚きました。とっても素晴らしいサービスですね。

参考

この記事を書いた人

ko31

岩手県出身、群馬県在住のフリーランスWeb系エンジニアです。
Webシステム・アプリ、Webサービス、WordPress開発等を雑多にこなしています。バンカラ応援好きの振り飛車党。
PHP / WordPress / 高校野球 / 将棋 / WordPress / ブログ / 食べること / 二児の父親

>>もっと詳しいプロフィールはこちら

お仕事のご相談・お問い合わせ

当ブログの管理人は、Gosign(ゴーサイン)という屋号でフリーランス Web エンジニアとして活動しています。
ブログの掲載内容はもちろん、Web サイト制作や Web アプリケーション開発などのご相談・ご質問がありましたら、どうぞお気軽にお問い合わせください!

合わせて読みたい記事