常時SSL化についてのお話

f:id:coconalainc:20180914110208j:plain

こんにちは。ココナラでインフラを担当しているひろたです。

今回は、SSLについてのお話です。 最近Google Chrome(Chrome 69から)では、常時SSLに対応していないサイトは警告が出る様になりましたね。

こんな風に

f:id:coconalainc:20180919160641p:plain

つまり今後HTTPでの通信ですら赤文字で「保護されていません」なんて表示されちゃうわけです。 当然いまどきどこのサイトも当たり前の様にHTTPS化されていると思います。

・・・自分のサーバはどうだっけ・・

私もインフラエンジニアのはしくれ、個人でサーバーの一つや二つは持っている。 当然SSL証明書も実装してあったはず、と思いチェックしたところ気持ちいいくらい全力でHTTPS未実装だったので 急いで対応しました。

てなわけでLet's EncryptでワイルドカードSSL証明書の発行を自分のドメイン向けに作成してみようと思います。

certbotを使って作ってみました。
作業環境はこんなかんじ。

  • Ubuntu 16.04
  • certbot 0.26.1

リポジトリ追加

まずはcertbotをインストールするためにppaからリポジトリを追加する。

# add-apt-repository ppa:certbot/certbot

certbotをインストール

# apt install certbot
# certbot --version
certbot 0.26.1
※ certbotのバージョンは0.22以降が必要です。

証明書を取得

certbotコマンドはこんな感じです。
ポイントは--preferred-challengesオプションで認証方法をDNSにすることと、
今回はワイルドカード証明書を作成するのでACMEv2が利用できるサーバを指定すること。

# certbot certonly --manual -d *.example.com \
                   --agree-tos \
                   --no-bootstrap \
                   --manual-public-ip-logging-ok \
                   --preferred-challenges dns-01 \
                   --server https://acme-v02.api.letsencrypt.org/directory

実行するとこんな感じでTXTレコードを追加しろと出てくるので、設定してあげましょう

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

dI_dJ7s8Jm_reYLVhcPFnFLLiKGgruQerjB5W9Cj0sU

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

最後にEnterを押す。これだけ、ね簡単でしょう?

こんなかんじで証明書のシンボリックリンクを設置されてるので、Webサーバに設定してあげるだけ

証明書: 
  /etc/letsencrypt/live/example.com/cert.pem
中間証明書: 
  /etc/letsencrypt/live/example.com/chain.pem
証明書と中間証明書の連結ファイル: 
  /etc/letsencrypt/live/example.com/fullchain.pem
秘密鍵: 
  /etc/letsencrypt/live/example.com/privkey.pem

nginxに設定して動作確認

こんな感じでワイルドカード証明書もお手軽に作成できました。

f:id:coconalainc:20180912193253p:plain

個人のテスト環境等で大活躍。 これでサブドメインを気にせず証明書が使えますね!



お知らせメール登録
よもやまブログの更新時にメールでお知らせします。