1011 文字
5 分
Let's Encryptを使って簡単0円でサーバ証明書を取得

概要#

  • Let’s Encrypt を使って、無料サーバ証明書を発行して設置します。
    • 手順通りやれば、10分程度で出来ると思います。
    • 最近Facebookがゴールドスポンサーになって、盛り上がってきています。
    • 12月3日にPublic Betaになりました。
    • 今は3ヶ月分の証明書を取得出来ます(コマンド1発で、無料で更新可能)
  • サーバ環境は、Mac OS X 10.10 + Nginx 1.8です。
    • おそらく、各種OS + Nginxなら同じ手順で行けると思います。
  • Google Chromeが、WebRTCを使うためにはHTTPSが必須になりました。

セットアップ#

cloneしてくる。ちょっと容量は重め。

Terminal window
% git clone https://github.com/letsencrypt/letsencrypt
% cd letsencrypt

証明書取得#

  • 普通の証明書取得は、メアド確認やら存在確認やらで凄い時間と手間がかかりますが、そこら辺はクライアントアプリが自動でやってくれます。
  • 80番ポートを使って、ドメインの所在確認をしているので、既に80番ポートが使われていると以下のようなエラーが出ます。
  • 80番ポートで稼動しているサービスがある場合は止める必要があります。

img_566becf100326

  • 私の場合、Mac OSで動いているHTTPサーバを止めました。
Terminal window
% sudo brew services stop nginx-full
Stopping `nginx-full`... (might take a while)
==> Successfully stopped `nginx-full` (label: homebrew.mxcl.nginx-full)

そして、キーペアの生成などを一発で行えるコマンドを実行します。

Terminal window
./letsencrypt-auto certonly --standalone
  • Mac OS X 場合、-dオプションでホスト名を指定したら、プログラムが異常終了したので、オプションは渡さずに実行しました。そうすると、インタラクティブにホスト名を聞かれるので、そこで入力します。
  • Debianで実行した場合、以下のパッケージをインストールするように求められます
    • augeas-lenses libexpat1-dev libpython-dev libpython2.7 libpython2.7-dev python-chardet-whl python-colorama-whl python-distlib-whl python-html5lib-whl python-pip-whl python-requests-whl python-setuptools-whl python-six-whl python-urllib3-whl python2.7-dev python3-pkg-resources python3-virtualenv

letsencrypt

初回は、メールアドレスを聞かれます。

そして、最後にキーなどが生成されます。
以下に、2つ分の証明書を作った場合のファイル一覧を貼り付けます。

1__ssh

nginxに設置#

nginxの設定を抜粋します。ほとんどコピペで行けると思います。

重要な点は以下の2つを書き換えることだけです。

server {
listen 443 ssl;
server_name matsu.teraren.com ;
ssl_certificate /etc/letsencrypt/live/matsu.teraren.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matsu.teraren.com/privkey.pem;
# 1. 暗号方式の設定
# (デフォルト) ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
# 2. Logjam攻撃対策
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# 3. Enable OCSP (Online Certificate Status Protocol) Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
......
}

証明書を確認#

  • このブログ自体には、httpへの参照があり、画像が出なかったりするので検証はこちらで。

  • ちゃんとSSL緑のキーになっています!

    ssl certified

  • ssl certificate by letsencrypt

    サーバ証明書を見てみましょう。

  • ssl certificate by letsencrypt

    中間証明書を見てみましょう。

  • ルート証明書を見てみましょう。

    • DST Root CA X3ですね。

      ssl certificate by letsencrypt

ブラウザ確認#

  • OK
    • Mac OS 10.11 (El Capitan) Google Chrome
    • Mac OS 10.11 (El Capitan) Safari
    • Mac OS 10.11 (El Capitan) Firefox 43.0.1
    • iOS 9.2 Google Chrome
    • Mac OS X 10.10 curl
    • Mac OS X 10.11 curl
    • iOS 9.2 safari
    • Mac OS 10.10.5 (Yosemite) Firefox 43.0.1

証明書の更新方法#

自動化するなら、こんな感じになるかなと思います。

Terminal window
% sudo brew services stop nginx-full
% sudo ./letsencrypt-auto certonly
% sudo brew services start nginx-full

サンプル#

この辺りのサービスもSSL化しました。(ついでに、HTTP2化も)

制限#

Rate limit on registrations per IP is currently 10 per 3 hours
Rate limit on certificates per Domain is currently 5 per 7 days

https://community.letsencrypt.org/t/public-beta-rate-limits/4772/3

SSL TESTの結果#

ssl test matsu.teraren.com

自動更新#

これで、今日からあなたも快適なSSLライフを送れますね!

Let’s Encrypt!

更新履歴#

  • 2016/1/4 cert.pemfullchain.pemに変更
Let's Encryptを使って簡単0円でサーバ証明書を取得
https://blog.teraren.com/posts/lets-encrypt-free-ssl-certificate/
作者
Yuki Matsukura
公開日
2015-12-12
ライセンス
CC BY-NC-SA 4.0

コメント