Let's Encrypt!!


Let's Encrypt

さぁ、暗号化を始めましょう!

・・・っていう勧誘ではなくて。

おそらくご存知の方が多いと思うのですが、Let's encryptという無料でSSL証明書生成しちゃおうぜプロジェクト(乱暴)というのがあります。
https://letsencrypt.org/

私自身で知ったわけではなく、こういうのあるから使ってみたら?って教えてもらったんですが。

いろいろと調べてみたところ、まぁ、普通に使えそうだな、と思ったので使ってみました。

仕組み?

Let's encryptを使う、というか、SSL証明書を発行してもらうには、SSL証明書を作りたいサーバーでLet'sEncryptクライアント(以下LEC)をインストールする必要があります。
何となくログを眺めてみてたところ、

  1. LECがCSRをよしなに作る。
  2. LECが DocumentRoot に適当なファイル(.well-known/ほげほげ)を生成する
  3. LECがどこか(おそらくLet's Encryptサーバー)にCSR送信して申請する
  4. 3.のときに合わせて2.で作ったほげほげのところを一緒にURLパラメータで送信する
  5. LEサーバーが指定されたファイルにアクセスしてくる
  6. LEサーバーが4.のレスポンスとしてアクセスした結果を返す
  7. LECが証明書作る

てな感じだと思いました。
※だいぶ適当なので信用しきっちゃダメですよ。

いわゆるファイル認証ってやつですね。
これ、大手さん、例えばSymantec, GeoTrustなどの証明書発行手順とほぼ同じだと思います。
クライアントがインストールしてあれば1つのコマンドで完全に自動化出来るのが大きいと思います。

構築した環境について

CentOS6.5 + Apache2.2.15

必要なもの

  • サーバー
  • 自前のWebアプリケーションサーバー(私はApacheですがNginxでもOKとか)
  • DNSレコード(AでもCNAMEでも可)編集権限
    LEサーバーはDNSレコードを引いてアクセスしてくるので、LECを実行したサーバーを向かせられないとダメです。
  • 「あ、やべ!」と思った時に対処できる落ち着き。(←大切)

環境の構築

一番最初に引っかかったこと。

私はCentOS6でこの作業やったのですが、CentOS5とか6とかはデフォルトPythonが2.6以下なんですよね。
Let's encryptのインストールにはPython2.7以上が必要そうです。

詳細な手順については・・・そのうち書きます。
メモがhistoryなもので分からない!!

SSL証明書作ります!

./letsencrypt-auto certonly -w /var/www/html -d hoge.fuga.com -m [email protected] --agree-tos --webroot

この1コマンドでおしまい!
ね、簡単でsh(ry

後は /etc/letsencrypt/live/hoge.fuga.com/ の下に出来上がった

  • cert.pem を SSLCertificateFile に
  • privkey.pem を SSLCertificateKeyFile に
  • chain.pem を SSLCertificateChainFile に

指定してあげて再起動でOKです。

Googleさんもhttpsを優先付けるとか、検索キーワードをSSLサイトにしか渡さないとかになってきましたので、
これらの対策にもいいのではないかと思いますー。

おまけ(SANsについて)

市販のSSL証明書のサービスでは、SANsというものに対応しているものがあります。
これは、wwwありなし両方ともOKな証明書を生成するサービスです。
https://www.hoge.com でも https://hoge.com でも使えちゃうアレです。

サーバーのVirtualHostにServerAliasとして指定していたり、wwwなしをwwwありに転送かける設定をしてたりするサーバーは多いのではないでしょうか。
このSANsの設定がSSL証明書にないと、例えば、www.hoge.comで証明書作った場合、
1. https://hoge.com にアクセスする
2. 証明書はあるがFQDNが違うので証明書エラー画面が出る
3. 証明書のエラーを無視して進むと、晴れて https://www.hoge.com がエラーなしで表示される
となってしまい、1.の時にちょっとカッコ悪いです。

さて、今回のLet's encryptですが、ちゃんとこれに対応してます!

./letsencrypt-auto certonly -w /var/www/html -d www.hoge.com,hoge.com -m [email protected] --agree-tos --webroot

って -dの後を , 区切りで追記するだけです!
これ別ドメインでも書けちゃうんじゃなかろうか。

ちょっとしたSSL証明書が欲しいというときには非常に便利なのでぜひ!

おまけ(wordpress)

wordpressのサーバーの場合、-w が [wordpressのインストール先] になるのでご注意です。
私の場合は、/var/www/wordpress 以下にwordpressがセットアップされていたので、
-w /var/www/wordpress でした。
まぁ、DocumentRoot を入力しましょうね、というおまけでした。