tomy634.com // ブログ

5分でわかるSSL/TLS:仕組み・証明書・実務チェックリスト【2025年版】

公開日: 2025-11-18 / 更新日: 2025-11-18 セキュリティ入門運用
この記事のゴール
・TLSの流れを“図なしで”イメージできる
・どの証明書を選ぶか迷わない
・サーバ設定で外しがちな要点(HSTS/OCSP/HTTP/2+3/混在コンテンツ)を潰す

1. SSLとTLSの違い(用語)

SSLは歴史的名称、現在はTLS。ブラウザの「鍵マーク」はTLSで暗号化されている状態。言い間違えても通じるが、正式にはTLSと呼ぶのが正確です。

2. TLS 1.3のざっくり流れ

  1. ClientHello:対応暗号・拡張(ALPN等)を送る
  2. ServerHello:方式を決め、サーバ証明書と署名を返す
  3. 鍵合意(ECDHE)→ 共有鍵ができる
  4. 以降の通信は共通鍵で暗号化(AES-GCM/ChaCha20-Poly1305)

TLS1.3は往復回数が少なく速い。HTTP/2(ALPN: h2)やHTTP/3(QUIC+TLS1.3)とも相性◎。

3. 証明書の種類と選び方

種類何を確認する?用途の目安
DV(Domain Validation)ドメインの所有権多くのサイトはこれで十分(Let’s Encrypt等)
OV(Organization Validation)企業実在+ドメイン法人サイトで“社名確認”の要件がある場合
EV(Extended Validation)厳格な実在確認近年は表示差が薄く、必須でないことが多い
ワイルドカード*.example.com 等の下位サブドメインサブドメイン乱立時に便利(ACME DNS-01など)

4. 運用の型(更新・自動化・ヘッダ)

5. 実務チェックリスト(保存版)

6. よくあるエラーと対処

症状原因対処
NET::ERR_CERT_AUTHORITY_INVALID自己署名/中間証明書欠落fullchainを配備、正式CAを使用
ERR_CERT_COMMON_NAME_INVALIDSANにFQDNが無い証明書のSAN(SubjectAltName)を確認
Mixed ContentHTTPリソース読込全リソースをHTTPS化、相対URL見直し
Handshake失敗古暗号/プロトコル不一致サーバ側のTLSバージョン・暗号スイートを更新

7. 便利コマンド(検証)

# サーバ証明書とチェーン確認
openssl s_client -connect example.com:443 -servername example.com -showcerts 
# HTTP/2/3のALPN確認(curl 8+ など)
curl -I --http2 https://example.com
# HTTP/3(対応環境のみ)
curl -I --http3 https://example.com

8. 最小Nginxスニペット(例)

server {
  listen 443 ssl http2;
  server_name example.com;
  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  # ...(root/proxy設定)
}
server {
  listen 80;
  server_name example.com;
  return 301 https://example.com$request_uri;
}

9. HTTP/3(QUIC)へのメモ


関連: QRコードの安全講座 / Git入門:3コマンド / 文字数カウンター
検証メールの受信は、広告ゼロの一時メール tomy634.com が便利です。