0Pricing
Cloud & IT Cert Prep · レッスン

TLSバージョン、暗号スイート、完全前方秘匿性

TLS 1.2/1.3を設定し、強力な暗号スイートを選択して、取得された通信を後から復号できないよう完全前方秘匿性を有効にします。

「TLSバージョン、暗号スイート、完全前方秘匿性」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

TLSプロトコルの概要

TLS(Transport Layer Security)は、インターネット通信の大部分を保護する暗号プロトコルです。HTTPS、SMTPS、IMAPS、LDAPS、VPNはいずれもTLSに依存しています。TLSは、機密性(暗号化によって盗聴を防止)、完全性(MACによって改ざんを防止)、認証(証明書によってサーバーの身元を検証)という3つのセキュリティ特性を提供します。TLSはSSL(Secure Sockets Layer)から発展したもので、SSLは現在非推奨です。現在のバージョンはTLS 1.2(広く導入済み)とTLS 1.3(より高速かつ安全で、新規導入では推奨)です。

TLSのバージョンの変遷と非推奨化

TLSには複数のバージョンがあり、古いバージョンには重大な脆弱性が含まれています。SSL 2.0/3.0:非推奨で、POODLE攻撃やDROWN攻撃に対して脆弱です。TLS 1.0:2020年にNISTおよびPCI-DSSによって非推奨となりました(ブロック暗号を使用した場合、BEAST攻撃やPOODLE攻撃に対して脆弱です)。TLS 1.1:TLS 1.0と同時に非推奨となりました。TLS 1.2:現在の最低基準であり、強力な暗号スイートを適切に設定すれば安全です。TLS 1.3:2018年にリリースされ、脆弱なアルゴリズムをすべて排除し、前方秘匿性を必須としています。また、ハンドシェイクが大幅に高速化され(2-RTTから1-RTT)、ダウングレード攻撃を防止します。PCI-DSS 4.0ではTLS 1.2以上が必須で、TLS 1.3が推奨されています。

# TLS version timeline
SSL 2.0   1995  DEPRECATED (DROWN)
SSL 3.0   1996  DEPRECATED (POODLE)
TLS 1.0   1999  DEPRECATED 2020 (BEAST, POODLE)
TLS 1.1   2006  DEPRECATED 2020 (no improvements over 1.0)
TLS 1.2   2008  MINIMUM STANDARD (strong ciphers required)
TLS 1.3   2018  RECOMMENDED (mandatory PFS, faster, secure)

# Check which TLS versions a server supports
nmap --script ssl-enum-ciphers -p 443 example.com
# Or:
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3

暗号スイート

暗号スイートとは、TLSセッションで組み合わせて使用する暗号アルゴリズムのセットです。各暗号スイートでは、鍵交換アルゴリズム(セッション鍵を確立する方法)、認証アルゴリズム(サーバーを検証する方法)、バルク暗号化アルゴリズム(データを暗号化する方式)、メッセージ認証コード(MAC)アルゴリズム(完全性を検証する方法)が指定されます。クライアントとサーバーはTLSハンドシェイク中に使用する暗号スイートをネゴシエーションし、サーバーは双方がサポートする中で最も強力なスイートを選択します。

# TLS cipher suite naming format (TLS 1.2)
# TLS_[KeyExchange]_WITH_[Cipher]_[MAC]
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  ECDHE     = Elliptic Curve Diffie-Hellman Ephemeral
  RSA       = Server certificate authentication
  AES_256_GCM = 256-bit AES in Galois/Counter Mode
  SHA384    = HMAC with SHA-384 for integrity

# TLS 1.3 simplified format (fewer components)
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256

鍵交換アルゴリズム

鍵交換フェーズでは、セッション鍵そのものを送信せずにセッション鍵を確立します。RSA鍵交換(TLS 1.2):クライアントがサーバーの公開鍵でプレマスターシークレットを暗号化します。後から秘密鍵が漏えいすると、過去のすべてのセッションを復号できます。DHE(Diffie-Hellman Ephemeral):セッションごとに新しい鍵ペアを生成します。前方秘匿性を提供しますが、処理が低速です。ECDHE(Elliptic Curve DHE):DHEと同じ前方秘匿性を、より短い鍵長と優れた性能で実現します。そのため、TLS 1.2とTLS 1.3の両方で推奨される鍵交換方式です。TLS 1.3ではECDHEまたはDHEが必須で、RSA鍵交換は完全に廃止されています。

完全前方秘匿性(PFS)

完全前方秘匿性(PFS)により、サーバーの長期的な秘密鍵が後から漏えいしても、記録済みの過去のセッションを復号できないようにします。PFSは、各セッションで新しい一時鍵ペアを生成し、使用後に破棄する一時鍵交換(ECDHEまたはDHE)によって実現します。PFSがない場合(RSA鍵交換)、攻撃者は現在すべての暗号化されたTLSセッションを記録しておき、後に秘密鍵を入手した時点で過去にさかのぼって復号できます。NSAの「今収集し、後で復号する」監視戦略は、対象が最終的により強力な鍵へアップグレードすること、または量子コンピューターによって現在の鍵が破られることを前提としています。

# Cipher suites WITH perfect forward secrecy
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384     # Good
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256   # Good
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256        # OK (slower)

# Cipher suites WITHOUT perfect forward secrecy
TLS_RSA_WITH_AES_256_CBC_SHA256  # NO PFS - avoid
TLS_RSA_WITH_3DES_EDE_CBC_SHA    # NO PFS + weak

# Key: look for ECDHE or DHE prefix
# RSA alone as key exchange = no forward secrecy

避けるべき脆弱な暗号アルゴリズム

複数のレガシーな暗号コンポーネントは暗号学的に破られているため、無効にする必要があります。NULL暗号:暗号化をまったく行いません。輸出グレード暗号(FREAK攻撃):1990年代の米国輸出規制に準拠するため、意図的に弱くされていました。RC4:統計的な偏りがあり、攻撃に悪用されるストリーム暗号です。DESおよび3DES:ブロックサイズが小さすぎる(SWEET32攻撃)、または鍵長が不十分なブロック暗号です。MACにおけるMD5およびSHA-1:衝突脆弱性があります。匿名暗号(aNULL):サーバー認証を行いません。最新のTLS設定では、バルク暗号としてAES-GCM、ChaCha20-Poly1305、AES-CCMのみを許可してください。

# nginx: disable weak ciphers, enforce strong only
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:
             ECDHE-RSA-AES256-GCM-SHA384:
             ECDHE-ECDSA-CHACHA20-POLY1305:
             ECDHE-RSA-CHACHA20-POLY1305:
             ECDHE-ECDSA-AES128-GCM-SHA256:
             ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;

# Explicitly disable weak ciphers in Apache
SSLCipherSuite 'HIGH:!aNULL:!MD5:!3DES:!RC4:!EXPORT'

TLS 1.3の改善点

TLS 1.3では、1.2と比べてセキュリティが大幅に改善されています。必須のPFS:RSA鍵交換が廃止され、すべてのセッションでECDHEまたはDHEが使用されます。暗号スイートの削減:許可されるのは5種類のAEAD暗号スイートだけで、脆弱な暗号のネゴシエーションは発生しません。ハンドシェイクの高速化:TLS 1.2の2ラウンドトリップ(2-RTT)に対し、1ラウンドトリップ(1-RTT)で完了します。また、セッション再開では0-RTTを使用できます(ただし、0-RTTにはリプレイ攻撃に関する考慮事項があります)。暗号化されたハンドシェイク:ハンドシェイク中のサーバー証明書が暗号化されるため、受動的な観測者はクライアントがどの証明書(ひいてはどのWebサイト)に接続しているかを特定できません。

# TLS 1.3 handshake (simplified)
Client -> Server: ClientHello (supported ciphers, key shares)
Server -> Client: ServerHello (chosen cipher, key share)
                  {EncryptedExtensions}
                  {Certificate}
                  {CertificateVerify}
                  {Finished}
Client -> Server: {Finished}

# Both sides now have session keys
# Total: 1 round-trip before application data
# (TLS 1.2 required 2 round trips)

# Note: {} = encrypted (cert is hidden from observers)

ダウングレード攻撃とPOODLE

ダウングレード攻撃では、TLSサーバーとクライアントをだまして、双方がサポートしている中で、より古く脆弱なTLSバージョンまたは暗号スイートを使用させます。POODLE(Padding Oracle On Downgraded Legacy Encryption)は、接続エラーが発生した際にTLS実装がSSL 3.0へフォールバックする仕様を悪用しました。対策はSSL 3.0を無効にすることです。FREAKとLogjamは輸出グレード暗号を悪用しました。TLS_FALLBACK_SCSVは、クライアントが「これは優先バージョンではない」と通知するために含める擬似暗号スイートです。サーバーがこれを検出し、より高いバージョンをサポートしている場合、ダウングレードの試みを中止します。

証明書の検証とピンニング

TLSによるサーバー認証では、クライアントがサーバーの証明書チェーンを信頼できるルートCAまで検証します。重要な確認項目は、有効期限(証明書が有効期間内であること)、失効(CRLまたはOCSPで証明書が失効していないことを確認)、ホスト名(SANまたはCNが接続先ドメインと一致すること)、署名チェーン(中間CAとルートCAの署名が有効であること)です。Certificate Transparency(CT)では、パブリックに信頼されたすべての証明書を追記専用のCTログに記録することが求められ、誤って発行された証明書を発行から数分以内に検出できます。

# Check TLS certificate details
openssl s_client -connect example.com:443 \
  -showcerts 2>/dev/null | openssl x509 -noout \
  -text | grep -E 'Subject:|Issuer:|Not After:|SAN'

# Verify certificate chain
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt \
  server.crt

# Check OCSP status
openssl ocsp -issuer intermediate.crt \
  -cert server.crt \
  -url http://ocsp.ca.example.com \
  -text -noverify

SSL Labsと設定テスト

Qualys SSL Labs(ssllabs.com/ssltest)は、WebサーバーのTLS設定を評価する標準的なツールです。サポートするTLSバージョン、暗号スイートの強度、証明書の有効性、HSTS設定、前方秘匿性のサポート、既知の攻撃への耐性に基づき、サーバーをA+(優秀)からF(重大な問題)まで評価します。A+評価を得るには、TLS 1.2以上のみを使用し、すべてのECDHE暗号を有効にし、有効な証明書とpreload付きHSTSを設定する必要があります。組織は、初回設定後とTLSスタックを変更するたびにSSL Labsのテストを実行してください。PCI-DSSなど、多くのコンプライアンスフレームワークでは、TLS設定の定期的な評価が求められます。

TLS証明書管理のベストプラクティス

TLS証明書の有効期限切れは、サービス停止やユーザーへの信頼警告を引き起こし、攻撃者に悪用される可能性があります。証明書のライフサイクル管理には、すべての証明書を証明書インベントリで追跡すること、有効期限の少なくとも30日前に期限切れアラートを設定すること、ACMEプロトコル(Let's Encrypt、Certbot)で更新を自動化すること、侵害によるリスクのある期間を短縮するために短い証明書の有効期間(パブリック証明書では90日)を使用すること、ワイルドカード証明書(*.example.com)を慎重に使用することが含まれます。ワイルドカード証明書が侵害されると、すべてのサブドメインに影響します。証明書管理プラットフォーム(Venafi、DigiCert CertCentral)は、大規模な証明書インベントリ全体にわたる検出とライフサイクル管理を自動化します。

# Auto-renew Let's Encrypt cert with Certbot
# Install Certbot
apt install certbot python3-certbot-nginx

# Issue certificate
certbot --nginx -d example.com -d www.example.com

# Certbot auto-renewal (runs twice daily via systemd timer)
systemctl status certbot.timer

# Test renewal without actually renewing
certbot renew --dry-run

# Verify cert expiry date
openssl x509 -enddate -noout -in /etc/ssl/certs/example.crt
# Output: notAfter=Feb 20 12:00:00 2025 GMT

クイックチェック

このレッスンで学んだCompTIA Security+ (SY0-701)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、TLS 1.0/1.1は非推奨であり、TLS 1.2が最低基準、TLS 1.3が推奨されること、TLS 1.3ではPFSと暗号化されたハンドシェイクが必須であること、暗号スイートは鍵交換(ECDHEを推奨)、バルク暗号化(AES-GCM、ChaCha20)、MACアルゴリズムを指定すること、また完全前方秘匿性には一時的な(DHE/ECDHE)鍵交換が必要であり、鍵が侵害された後でも過去のセッションを復号できないようにすることを学びました。次は、安全なDNSであるDNSSECとDNS over HTTPSについて学びます。

よくある質問

「TLSバージョン、暗号スイート、完全前方秘匿性」レッスンは無料ですか?

はい。「TLSバージョン、暗号スイート、完全前方秘匿性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

「TLSバージョン、暗号スイート、完全前方秘匿性」で何を学びますか?

TLS 1.2/1.3を設定し、強力な暗号スイートを選択して、取得された通信を後から復号できないよう完全前方秘匿性を有効にします。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cloud & IT Cert Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「TLSバージョン、暗号スイート、完全前方秘匿性」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?

はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 安全でないプロトコルの置き換え:Telnet対SSH、FTP対SFTP
  2. TLSバージョン、暗号スイート、完全前方秘匿性
  3. セキュアDNS:DNSSECとDNS over HTTPS(DoH)
  4. IPsec、VPNプロトコル、リモートアクセスセキュリティ
← Cloud & IT Cert Prepに戻る