rui live note

WordPress、PHP、子育て、ブログ、将棋、コワーキング、子育て、群馬等に関する日々感じたことを書いているブログです

*

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

      Web, Webサービス ,

  • このエントリーをはてなブックマークに追加
  • Pocket

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時に自動更新処理が行われるようにしてみました。

感想

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

参考

ad

この記事が気に入ったらシェアしてもらえると嬉しいです!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • follow us in feedly
  • RSS

  関連記事

Analytics
若干アクセス数が回復して一安心…。2014年10月のアクセス数レポートです。

ついこないだ記事書いたばかりの気がしますがもう一ヶ月経ったんですね。。2014年 …

グラフ
PageSpeed Insights でサイト内のリソースだけを対象に分析する方法

先日の改善ネタに引き続き PageSpeed Insights の小ネタです。 …

LINEスタンプ
小学生が作ったLINEスタンプ「こねことこいぬとこぐまとこうさぎたち」が公開されました

小学生の娘が描いた手描きイラストを LINE スタンプにした「こねことこいぬとこ …

イベント
イベントや勉強会に使えるTwitter関連Webサービスを調べてみました

7/25開催の WordPressもくもく勉強会@群馬 ですが、だいぶ参加登録し …

Twitterカード
こんな簡単に機能改善!WordPressブログにTwitterカードを設定してみました

自分のブログにTwitterカードの設定をしてみた。 – @YuG_ …

Analytics
アクセス落ち込み!2014年9月のアクセス数レポートです。

さて、10月になり今年も残すところ3ヶ月って・・・うそでしょ!?という早さですが …

アドベントカレンダー
今年参加したアドベントカレンダーのふりかえり

クリスマスとともに今年のアドベントカレンダーも終わってしまいましたね。昨年のよう …

ブログ
今年の目標ブログ記事数を100→150に上方修正してみる

そういえば、今年1月にこんなことをつぶやいていたことをふと思い出しました。 今年 …

PERARI
WebRTCで動画チャットできる「PERARI」というWebサービスを作りました

※この投稿は「WebRTC Advent Calendar 2014」の3日目の …

でーびーくん
LINEスタンプ「でーびーくん」の使用回数ランキングTOP5

先日リリースされた LINE スタンプ「でーびーくん」。おかげさまで皆様にちょこ …