3秒でわかる
サイトの身元と公開鍵を認証局が保証する電子ファイル。通信の暗号化と、偽サイトへのなりすまし防止の両方を支える土台になっています。
もう少し詳しく
どういうものか
SSL証明書は、そのドメイン名の持ち主であることと、暗号化に使う公開鍵を、認証局という第三者が署名して保証する電子ファイルです。ブラウザはサイトに接続した瞬間にこれを受け取り、署名をたどって信頼できるかを確かめます。確かめられたら公開鍵で鍵のやり取りを行い、以降の通信を暗号化します。名前はSSLのままですが、実際に動いている規格は後継のTLSです。
なぜ必要か
暗号化だけなら証明書は要りません。しかしそれでは、偽サイトと安全に通信しているだけの状態になります。証明書は「今つないでいる相手が本当にそのドメインの持ち主か」を確かめる部分を担い、盗聴となりすましの両方を防ぎます。加えて、HTTPS でないサイトはブラウザに警告を出され、検索評価の面でも不利になります。フォームを置くページなら、入力内容がそのまま経路上を流れることになるため必須と考えます。
具体例
いま繋いでいる相手の証明書は、コマンドで中身を確認できます。
# 有効期限と発行先を見る
openssl s_client -connect example.com:443 -servername example.com </dev/null \
| openssl x509 -noout -subject -issuer -dates
# Let's Encrypt で取得と自動更新
sudo certbot --nginx -d example.com -d www.example.com
sudo systemctl list-timers | grep certbotつまずきやすいところ
期限切れが最も多い事故です。無料の証明書は有効期間が90日と短く、自動更新の仕組みが止まっていることに気づかないまま迎えます。更新タイマーの動作確認まで含めて設定します。次に多いのが中間証明書の付け忘れで、ブラウザでは開けるのにスマホアプリやコマンドからは失敗する、という切り分けにくい症状になります。ワイルドカード証明書が階層を1段しかカバーしない点も誤解されがちです。証明書はドメインに対して発行されるもので、サーバー1台ごとではありません。同じ証明書を複数台へ配る運用は普通ですが、そのぶん秘密鍵の置き場所と読み取り権限の管理が甘くなりがちです。配布の経路も含めて決めておきます。
似た用語との違い
| 語 | 内容 |
|---|---|
| SSL証明書 | 身元と公開鍵を保証するファイル |
| TLS | 実際に暗号化通信を行う規格 |
| HTTPS | TLSの上でHTTPを流す通信方式 |
覚え方
暗号化と身元確認は別の話です。証明書が担うのは後者で、これがあって初めて、暗号化した相手が本物だと言えるようになります。