Googleさんが
『HTTPSページを優先的にインデックスに登録しちゃうぜ!』なんて言い出したものだからサイト制作者はさぁ大変。
Google ウェブマスター向け公式ブログ: HTTPS ページが優先的にインデックスに登録されるようになります
StartSSLなんてのもあるので、無料でSSL証明書を取得して運用する事も可能なんだけど、普通に秘密鍵作って、CSR作って、証明書を申請して、設定をしないとダメなのでなかなか敷居が高いんだよね。
いや、WEBサーバを構築できる人ならそんなに難しくはないんだけど(^^;)
そこで、昨年くらいに登場したLet's Encrypt。
期間は3ヶ月と短いものの、クライアントを使えば自動的に更新が可能なのでCronに設定しておけば期限切れとか意識せずに済む。
ただし、まだオープンβ版なんだよね(^^;)
CentOS6やScientificLinux6だとPython2.6で古いってWarningが出ちゃうんだけど、とりあえず動く。
インストールはgitを使う。インストールされて無い場合はyumでさっくりインストールしてしまう。
yum -y install git
cd /usr/local
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
って感じでコマンドを実行するとインストールがされる。最後にヘルプが表示されたら成功。
必要なモジュールが自動的にインストールやアップデートされちゃうのでもし使ってるモジュールがある場合は注意が必要かなぁ。
毎回コマンド実行したらPythonのモジュールチェックが走るのが面倒なんだよなぁ。
さて、実際に証明書を取得するんだけど、Let's Encryptはドメイン認証型なので、DNSでドメイン名がちゃんと引ける必要がある。
動きとしてはLet's Encryptサーバが80に繋ぎにきて正常な応答があった場合は証明書が発行される。
ただ、その際に既存の80を停めて自前で認証WEBサーバを起動して認証するそうなので公開してるサイトじゃ使いづらい。
なのでここでは証明書を発行するだけのオプションを利用する。
./letsencrypt-auto certonly --webroot -w [ドキュメントルートまでのフルパス] -d [ドメイン名] www.[ドメイン名]
また、ドキュメントルートが違う場合は-wと-dをセットで追加すればOK
これだとemailや利用許諾をに同意するTUI*1が起動するので、オプションで指定してやる。
詳しいオプションを知りたい場合は
./letsencrypt-auto --help all
とコマンドを実行する。
詳細なヘルプを確認すると
-mでメールアドレスの指定
--agree-tosで利用許諾を承認
って出来る事がわかる。
それを踏まえて
./letsencrypt-auto certonly --webroot -w [ドキュメントルートまでのフルパス] -d [ドメイン名] www.[ドメイン名] -e [メールアドレス] --agree-tos
無事に証明書が発行されたら、/etc/letsencrypt/live/[ドメイン名]/に証明書・秘密鍵・CA証明書・全部くっつけた4つのファイルのシンボリックリンクが作成されるのでWEBサーバの設定ファイルにはこのパスを設定する。
なんでこんな事をするかと言うと、証明書を更新すると通番がファイル名に登録されるので、実態のパスを設定すると毎回WEBサーバのコンフィグを変更しないといけないから。
実態は/etc/letsencrypt/archive/[ドメイン名]/に作成される。
後はWEBサーバの設定を変更して再起動してやればOK。ちなみにletsencrypt-autoはオプションによってWEBサーバのコンフィグまで自動的に設定してくれる。
なので・・・って訳でもないのだけど、バーチャルドメイン環境ではIPベースの設定ではなくSNIを使った名前ベースの設定をする必要がある。
さて、取得した証明書は最初に書いてる通り3ヶ月で失効してしまう。
この為、定期的な更新が必要となるのだけど、これもletsencrypt-autoで可能
./letsencrypt-auto renew
これだけ(^^)
証明書の有効期限を確認して有効期限が迫ってたら更新して、余裕があれば何もしない。
有効期限の何日前に実行したら更新されるのかわからないので、1週間に1回とか実行しとけば大丈夫じゃないかなぁ・・・と
いやいや、そんな曖昧な事では困るって場合は
./letsencrypt-auto renew --force-renew
ってな感じで--force-renewオプションを付ければ強制的に更新を実行してくれる。
これによって、複数のドメインを管理してても1ヶ月に1度更新すればOKになる。
まぁ、これだけだとちゃんと更新されたかなどわからないので、スクリプトを書いてメールか何かで通知してくれるようにするのが良いと思う。
全然関係無いんだけど、実家に中学生の頃に雑誌の検証で当たったオモチャのビリヤード台が残ってた(^^)
このマンガだったはず。1~最新刊って書き方をしてるって事は・・・完結してないのかねぇ(^^;)
*1:テキストユーザインターフェース