証明書の検証
サーバーの身元を確認します
「証明書の検証」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
なぜ証明書を検証するのですか
暗号化だけでは十分ではありません。攻撃者との接続を暗号化しても、保護している相手が間違っています。
証明書の検証により、実際に意図したサーバーと通信していることを確認できます。
クライアントが確認すること
ハンドシェイク中に、クライアントはいくつかの項目を検証します。
- 証明書のチェーンが信頼されたルートに到達すること
- 証明書が有効期間内であること
- 証明書が失効していないこと
- ホスト名が一致すること
ホスト名の照合
接続先のホスト名は、証明書のSubject Alternative Name (SAN)エントリと一致している必要があります。
以前使われていたCommon Name (CN)フィールドは、この用途では非推奨です。現在のクライアントはSANを必要とします。
openssl x509 -in cert.pem -noout -ext subjectAltName有効期間の日付
すべての証明書には、Not BeforeとNot Afterのタイムスタンプがあります。この期間外では、証明書は拒否されます。
openssl x509 -in cert.pem -noout -dates信頼チェーンの検証
クライアントはリーフ証明書から、信頼ストア内のルート証明書までチェーンをたどり、それぞれの署名を検証します。
信頼されたルートへの経路が存在しなければ、証明書が正しく見えても検証は失敗します。
失効の確認
クライアントは、証明書が有効期限前に失効していないかをOCSPまたはCRLで確認します。
多くのブラウザーは、確認を高速に保つためにOCSP staplingや整備された失効リストを利用します。
鍵用途の制約
証明書では、Key Usage拡張とExtended Key Usage拡張によって、許可される用途を宣言します。
サーバー証明書にはserverAuthを含める必要があり、CA証明書にはCAフラグを設定する必要があります。不適切に使用された証明書は拒否されます。
証明書のピン留め
ピン留めでは、クライアントに想定する証明書または公開鍵をハードコードします(モバイルアプリでよく使われます)。
CAが署名した有効な証明書でも、想定外のものであれば拒否されるため、不正なCAや侵害されたCAから防御できます。
検証に失敗した場合
よくある検証エラーには、次のものがあります。
- NET::ERR_CERT_DATE_INVALID(期限切れ)
- NET::ERR_CERT_COMMON_NAME_INVALID(ホスト名の不一致)
- NET::ERR_CERT_AUTHORITY_INVALID(信頼されていない発行者)
検証を省略する危険性
証明書の検証を無効にすると(たとえばcurl -kやverify=False)、なりすましに対する保護がすべて失われます。
中間者攻撃を招くため、本番コードでは決して使用しないでください。
# DO NOT do this in production
curl -k https://example.comコマンドラインから検証する
稼働中のサーバーに対して、完全な検証チェックを実行できます。
openssl s_client -connect example.com:443 \
-verify_hostname example.com -verify_return_error確認問題
開発者が本番環境で証明書エラーを無視するためにverify=Falseを設定しました。どのようなリスクが生じますか。
復習
クライアントが証明書を検証する方法を学びました。
- 確認項目には、チェーンの信頼性、有効期間、失効、ホスト名(SAN)が含まれます。
- ピン留めにより、不正なCAに対する防御が強化されます。
- 本番環境では、決して検証を無効にしないでください。
次は、TLSに対する一般的な攻撃を見ていきます。
よくある質問
「証明書の検証」レッスンは無料ですか?
はい。「証明書の検証」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「証明書の検証」で何を学びますか?
サーバーの身元を確認します ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「証明書の検証」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。