Let’s Encryptを使って簡単0円でサーバ証明書を取得

Linux

概要

  • 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してくる。ちょっと容量は重め。

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

証明書取得

  • 普通の証明書取得は、メアド確認やら存在確認やらで凄い時間と手間がかかりますが、そこら辺はクライアントアプリが自動でやってくれます。
  • 80番ポートを使って、ドメインの所在確認をしているので、既に80番ポートが使われていると以下のようなエラーが出ます。
  • 80番ポートで稼動しているサービスがある場合は止める必要があります。
img_566becf100326
  • 私の場合、Mac OSで動いているHTTPサーバを止めました。
% sudo brew services stop nginx-full
Stopping `nginx-full`... (might take a while)
==> Successfully stopped `nginx-full` (label: homebrew.mxcl.nginx-full)

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

./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

証明書の更新方法

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

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

サンプル

この辺りのサービスもSSL化しました。(ついでに、HTTP2化も)
金融機関コードAPI
郵便番号API

制限

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

Public beta rate limits
I’ll keep announcing changes in that thread. For today’s public beta launch the limits will remain: Rate limit on regist...

SSL TESTの結果

ssl test matsu.teraren.com

自動更新

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

Let’s Encrypt!

更新履歴

  • 2016/1/4 cert.pemfullchain.pemに変更

コメント

  1. serima より:

    fullchain.pem を使えば iOS 9.2 Safari でもエラー出ませんでしたよー

    https://community.letsencrypt.org/t/solved-ios-safari-not-trusted/5846/2