現象
HTTPS のサイトにアクセスしたところ、以下のようなエラーメッセージが表示され HTTLS 通信ができなかった事例を例にとり、トラブルシューティング方法を紹介します。
このページは表示できません
[詳細設定] で TLS 1.0、TLS 1.1、TLS 1.2 を有効にして、もう一度 https://16mem1 に接続してみてください。引き続きエラーが発生する場合は、サポートされていないプロトコルがサイトで使われている可能性があります。サイトの管理者に問い合わせてください。 |
トラブルシューティング方法Schannel のログ
証明書エラーのトラブルシューティングに便利な Schannel のログをクライアントにて有効にします。
Schannel は、SSL 通信時に使用される Windows のモジュールです。
1. レジストリエディター (regedit.exe) を起動します。
2. 以下のキーに移動します。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL
Schannel の詳細なログを表示させるため、以下の値を作成します。
名前 | EventLogging |
種類 | REG_DWORD |
データ | 0x7 |

データの値を変更することにより、ログの出力レベルの変更が可能です。より詳細な説明については
KB260729 をご参考ください。
4. OS を再起動します。
5. HTTPS を用いた接続ができない現象を再現させます。
6. Schannel のログが出力されている、システムのイベントログを確認します。
7. ソースが Schannel 、イベント ID が 36888 である、以下のようなログが記録されます。

8. イベントログに記載されている
URL を確認すると、イベントログに表示されている警告コード 40 は、ハンドシェークの失敗であることがわかります。
ネットワークキャプチャーハンドシェーク時のエラーの詳細を調べるため、パケットキャプチャーを取得してみます。
1. HTTPS を用いた接続ができない現象発生時のパケットキャプチャーを採取します。
2. SSH のハンドシェークを見てみると、サーバーから Server Hello を受け取った後に、クライアントが通信の終了を開始しておりました。

3. そのため Server Hello の「Handshake Protocol」→「Certificates」→「Certificate」→「signedCertificate」を見てみると「md5WitRSAEncryption」になっていました。
ハッシュアルゴリズムに MD5 が使用されていることがわかります。
また、TLS のバージョンは 1.2 でした。

4. 一方、クライアントの Client Hello を見てみると、「Handshake Protocol」→「signature_algorithms」 に MD5 を含むものは含まれていませんでした。

5. 上記のことより、クライアントで許可されていない signature_algorithms を用いた証明書をサーバー側で使用していたから、TSL 1.2 の接続ができなかったということがわかりました。
本問題の対策として、MD5 は安全なハッシュアルゴリズムではないので、他のハッシュアルゴリズムを用いた証明書の利用が推奨されます。
情報元TLS 1.2 handshake failure (英語)
関連記事セッションキーをエクスポートし、秘密鍵を共有することなくWireshark でSSL/TLS 通信を複合
- 2016/12/04(日) 23:15:32|
- Wireshark
-
| トラックバック:0
-
| コメント:0