SSL/TLS
Secure Sockets Layer / Transport Layer Security
TLSは、通信相手の認証、通信内容の暗号化、改ざんの検知を提供するプロトコルです。HTTPSではHTTPをTLSなどで保護します。SSLは旧来の名称で、現在の設定では後継のTLSを使います。
🐾 猫で例えると?
布の下に隠れる茶トラは、外から中身を見えにくくする暗号化のイメージです。ただし、TLSでも接続先IPや通信量などがすべて隠れるわけではありません。また、布を抜けた先、つまり通信の両端では内容を扱えます。暗号化は経路を守るもので、接続先サイトの誠実さまで保証しません。
💻 IT現場における「SSL/TLS」とは?
インターネット上のデータは、基本的にはリレーのバトンのように様々なルーターを経由して目的地に届きます。暗号化されていないHTTP通信は、ハガキをそのまま送るようなもので、通信を観測できる立場の第三者に、内容(パスワードやクレジットカード情報など)を読まれるおそれがあります。
そこでSSL/TLSを導入し、通信をHTTPS化することで、データを「開けられない強固なカプセル」に包んで送ります。現在では「SSL」という言葉が一般的に使われていますが、実態としてはより安全性が強化された後継規格である「TLS(Transport Layer Security)」が使用されています。
⚠️ SSL/TLSの仕組みと注意点
TLSのハンドシェイクでは暗号方式や鍵を合意し、Webでは通常、サーバー証明書を検証します。証明書の名前がアクセス先と一致するか、有効期限や信頼の連鎖に問題がないかも重要です。ドメインの確認ができても、そのサイトの販売商品や説明が安全・正確である証明にはなりません。
💡 サーバーでのSSL/TLS設定例
次はNginxのHTTPS設定の抜粋です。対象ドメインの証明書と秘密鍵が存在し、Nginx/OpenSSLが指定するTLSバージョンに対応していることが前提です。HTTPからの転送や証明書の自動更新は別途設定します。
# NginxのHTTPS設定の抜粋
server {
listen 443 ssl;
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;
} 現場では、無償で利用できるLet's Encryptなどを活用して証明書を自動更新する仕組みを構築するのが一般的です。古いプロトコル(SSL 3.0やTLS 1.0/1.1)は脆弱性が発見されているため、サーバー側の設定で明示的に無効化する必要があります。
🛠️ SSL/TLSを賢く使うためのポイント
証明書の更新、暗号化する範囲、HTTPとの混在を確認します。
- 証明書の有効期限切れを防ぐ: 「SSL証明書の期限切れでサイトが見れなくなる」はIT現場の風物詩(大事故)です。更新作業を自動化し、期限が近づいたら監視システムからアラートを飛ばす仕組みが必須です。
- 常時SSL化の徹底: ログインページや決済ページだけでなく、サイト全体のすべての通信をHTTPSで行う(常時SSL化)のが現在の標準要件です。HTTPへのアクセスはHTTPSへリダイレクトさせましょう。
- 混同に注意(SSLとTLS): 現在「SSL証明書」として販売・設定されているものは、すべてTLSに対応したものです。名称としては「SSL」が定着していますが、技術的にはTLSを利用していることを理解しておきましょう。
布の中の茶トラを外の視線から守るように、TLSは通信経路の内容を保護します。証明書の警告を無視せず、更新が成功しているか確かめ、接続先そのものの安全性とは分けて考えましょう。