↓ メインコンテンツへスキップ
  1. 記事/

Let’s encryptを使ってみる

無料でオレオレではないSSLのサーバ証明書が作れる,let’s encryptが,12/3にpublic betaになったので,このサイトで試してみました.

このサイトはFreeBSDの上でnginxを動かしているので,この環境上での証明書取得・導入手順をまとめておきます.

クライアントのインストール
#

クライアントのインストール方法は,pkgでpy27-letsencryptをインストールするだけ.お気軽.

% sudo pkg install py27-letsencrypt

証明書の取得
#

public betaなので,特に登録などは必要なく,以下のコマンドであっさり90日有効の証明書が取得できました.
ただし,letsencryptコマンドを -a standalone で動かす場合には,このコマンド自身がTCP/80ポートをlistenするWebサーバとして振る舞う(ドメイン名・IPアドレス確認のためらしい)ため,事前にwebサーバを止めておく必要があります.

% sudo /usr/local/etc/rc.d/nginx stop
% sudo letsencrypt certonly -t -a standalone -d www.kunimu.net --server https://acme-v01.api.letsencrypt.org/directory

letsencryptコマンドに付けたオプションは,以下の通りです.

-t : テキストベースで動作(付けないと,TUIになる)
-a standalone : スタンドアロンモード(自分がWebサーバとして振る舞う)で動作
-d www.kunimu.net : 証明書を取得したいFQDN(コマンドを動作させるマシンと一致している必要あり)
--server https://acme-v01.api.letsencrypt.org/directory : lets encryptの用意しているサーバを指定

コマンドを実行すると,以下のように注意事項が表示されるので,Agreeしておきます.

-------------------------------------------------------------------------------
This is a PREVIEW RELEASE of a client application for the Let's Encrypt
certificate authority and other services using the ACME protocol. The Let's
Encrypt certificate authority is NOT YET ISSUING CERTIFICATES TO THE PUBLIC.

Until publicly-trusted certificates can be issued by Let's Encrypt, this
software CANNOT OBTAIN A PUBLICLY-TRUSTED CERTIFICATE FOR YOUR WEB SERVER. You
should only use this program if you are a developer interested in experimenting
with the ACME protocol or in helping to improve this software. If you want to
configure your web site with HTTPS in the meantime, please obtain a certificate
from a different authority.

For updates on the status of Let's Encrypt, please visit the Let's Encrypt home
page at https://letsencrypt.org/.
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/usr/local/etc/letsencrypt/live/www.kunimu.net/fullchain.pem. Your
cert will expire on 2016-03-07. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.```

取得した証明書に関するファイルは,/usr/local/etc/letsencrypt/live/ドメイン名/の下に,以下のように置かれています.

```bash {style=github-dark, noClasses=true}
cert.pem : サーバ証明書
chain.pem : 中間CA証明書
fullchain.pem : サーバ証明書 + 中間CA証明書
privkey.pem : 証明書の秘密鍵```

ただし,これらはシンボリックリンクで,実態は /usr/local/etc/letsencrypt/archive/ドメイン名/certN.pem のようなファイルになっています.Nは証明書の取得回数を示す値で,新たな証明書を取得するたびにシンボリックリンクが更新されるようになっています.

このしくみのおかげで,Webサーバの設定ファイルから /usr/local/etc/letsencrypt/live/ 以下のファイルを参照するようにしておくだけで,常に最新の証明書を使うことができるようになっています.ステキ.

#  Webサーバ(nginx)の設定 {.highlight}

nginxの設定ファイル(/usr/local/etc/nginx/nginx.conf)に,以下のような設定を書き込みます.ルートディレクトリの設定など,一般的な設定については省略しているので,適宜追加してください.

```bash {style=github-dark, noClasses=true}
# HTTPS server
#
  server {
    listen 443 ssl;
    server_name www.kunimu.net;

    ssl_certificate /usr/local/etc/letsencrypt/live/www.kunimu.net/fullchain.pem;
    ssl_certificate_key /usr/local/etc/letsencrypt/live/www.kunimu.net/privkey.pem;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
  }```

この後,nginxを起動すれば,取得した証明書が有効になっています.

# ついでに

もののついでにhttpsの安全性を向上させてみました.

先ほどのnginxの設定に,以下を追加します.

```bash {style=github-dark, noClasses=true}
# OCSP Staplingの設定
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /usr/local/etc/letsencrypt/live/www.kunimu.net/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# サーバ側の暗号スイートの設定を優先
ssl_prefer_server_ciphers on;

# 使用するTLSのバージョンと暗号スイートを限定
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+ECDSA+AES128:kEECDH+ECDSA+AES256:kEECDH+AES128:kEECDH+AES256:kEDH+AES128:kEDH+AES256:DES-CBC3-SHA:+SHA:!aNULL:!eNULL:!LOW:!kECDH:!DSS:!MD5:!EXP:!PSK:!SRP:!CAMELLIA:!SEED;

# Diffie-Hellman鍵交換に使用するパラメータの指定
ssl_dhparam /usr/local/etc/nginx/ssl/dhparam.pem;

# 次回アクセス時にhttpsを使用するようにする
add_header Strict-Transport-Security max-age=31536000;

それから,httpサーバの設定にも以下を追加して,次回のアクセスからhttps通信を使用させるようにします.

add_header Strict-Transport-Security max-age=31536000;

さらに,以下のコマンドで,ssl_dhparamの設定で書いたファイルを追加します.

% sudo mkdir /usr/local/etc/nginx/ssl
% sudo openssl dhparam 2048 -out /usr/local/etc/nginx/ssl/dhparam.pem
% sudo chmod 700 /usr/local/bin/renew_cert.sh```

これでめでたく,Qualys SSL LabsのSSL Server Testで,A+の評価になりました.

スクリーンショット 2015-12-09 13.01.30