前回の投稿では、WinHttp APIセットを使った時の暗号化プロトコルのデフォルト値や設定すべき値について投稿しました。今回の投稿では、テストツールと使って実際の振る舞いを確認します。
WinHttp Test tool (WinHttpテストツール)
実際の振る舞いを確認するためには、確認するためのツールが必要です。そこで、WinHttp APIセットを使ってhttps通信をするテストツールを作成しました。
WinHttpテストツールは、ここにあります。
zipファイルをダウンロードし、展開すると、二つのファイルがあります。
- WinHttpTest.exe
- WinHttpTest64.exe
です。前者は32ビットアプリで、32ビットWindowsと64ビットWindowsで実行できます。後者は、64ビットアプリで、64ビットWindowsで実行できます。
Windows XPでの動作確認
前回の投稿で説明したように、Windows XPでは、
- サポート: SSL2/SSL3/TLS1.0
- デフォルト: SSL3/TLS1.0
です。
TLS1.1およびTLS1.2はサポートしていません。 そのため、このテストツールで、TLS1.1やTLS1.2を選択して通信しようとすると、
0x00000057(87): パラメータが間違っています。
のエラーとなり、通信できません。
SSL2/SSL3/TLS1.0のいずれかを有効にしたサーバーであれば接続できることが確認できます。TLS1.0以下が有効化されているサーバーは数が少なくなっているので、通信できるサーバーを見つけることは容易ではありません。
下記のサイトで見つけることができます(2019年8月時点)。
https://www.ssllabs.com/ssltest/
このWEBサイトの「Recent Worst」に表示されているサーバーの中には、SSL3が有効化されているものがあります。SSL3が有効化されたサーバーなら接続を試すことができます。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、以下のようになりました。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと通信できました
- TLS1.1: 「0x00000057(87): パラメータが間違っています」のエラーになった
- TLS1.2: 「0x00000057(87): パラメータが間違っています」のエラーになった
- Default: TLS1.0のみ、SSL3/TLS1.0の両方など、SSL3またはTLS1.0が有効化されたサーバーと通信できました
Windows Vistaでの動作確認
Windows Vistaでは、 Windows XPと同じで、
- サポート: SSL2/SSL3/TLS1.0
- デフォルト: SSL3/TLS1.0
です。
TLS1.1およびTLS1.2はサポートしていません。 そのため、Windows XPと同様に、このテストツールで、TLS1.1やTLS1.2を選択して通信しようとすると、
0x00000057(87): パラメータが間違っています。
のエラーとなり、通信できません。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、Windows XPの結果と全く同じでした。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと通信できました
- TLS1.1: 「0x00000057(87): パラメータが間違っています」のエラーになった
- TLS1.2: 「0x00000057(87): パラメータが間違っています」のエラーになった
- Default: TLS1.0のみ、SSL3/TLS1.0の両方など、SSL3またはTLS1.0が有効化されたサーバーと通信できました
Windows 7での動作確認
Windows 7では、
- サポート: SSL2/SSL3/TLS1.0/TLS1.1/TLS1.2
- デフォルト: SSL3/TLS1.0
です。デフォルトは、Windows Vistaと変わりませんが、サポートには、TLS1.1/1.2が追加されました。
そのため、TLS1.1/1.2を選択(チェック)しても、「0x00000057(87): パラメータが間違っています」のエラーにはなりません。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、TLS1.1/1.2のところは、Windows Vistaより改善されていました。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと接続できました
- TLS1.1: TLS1.1が有効化されたサーバーと通信できました
- TLS1.2: TLS1.2が有効化されたサーバーと通信できました
- Default: TLS1.0のみ、SSL3/TLS1.0の両方など、SSL3またはTLS1.0が有効化されたサーバーで通信できました
Windows 8.0での動作確認
Windows 8.0では、 Windows 7と同じで、
- サポート: SSL2/SSL3/TLS1.0/TLS1.1/TLS1.2
- デフォルト: SSL3/TLS1.0
です。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、Windows 7と同じでした。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと接続できました
- TLS1.1: TLS1.1が有効化されたサーバーと通信できました
- TLS1.2: TLS1.2が有効化されたサーバーと通信できました
- Default: TLS1.0のみ、SSL3/TLS1.0の両方など、SSL3またはTLS1.0が有効化されたサーバーで通信できました
Windows 8.1での動作確認
Windows 8.1では、
- サポート: SSL2/SSL3/TLS1.0/TLS1.1/TLS1.2
- デフォルト: SSL3/TLS1.0/TLS1.1/TLS1.2
です。Windows 8.0と比べて、サポートは同じですが、デフォルト値に、TLS1.1/1.2が追加されました。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、Default以外は、Windows 7と同じでした。Defaultは改善されています。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと接続できました
- TLS1.1: TLS1.1が有効化されたサーバーと通信できました
- TLS1.2: TLS1.2が有効化されたサーバーと通信できました
- Default: TLS1.0のみ、SSL3/TLS1.0の両方、TLS1.2のみなど、SSL3またはTLS1.0またはTLS1.1またはTLS1.2のどれか一つ以上が有効化されたサーバーで通信できました
Windows 10 1507から 1511での動作確認
Windows 10 1507から1511まででは、Windows 8.1と同じで、
- サポート: SSL2/SSL3/TLS1.0/TLS1.1/TLS1.2
- デフォルト: SSL3/TLS1.0/TLS1.1/TLS1.2
です。Windows 8.1と同じです。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、Windows 8.1と同じでした。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと接続できました
- TLS1.1: TLS1.1が有効化されたサーバーと通信できました
- TLS1.2: TLS1.2が有効化されたサーバーと通信できました
- Default: TLS1.0のみ、SSL3/TLS1.0の両方、TLS1.2のみなど、SSL3またはTLS1.0またはTLS1.1またはTLS1.2のどれか一つ以上が有効化されたサーバーで通信できました
Windows 10 1607以降での動作確認
Windows 10 1607以降では、
- サポート: SSL3/TLS1.0/TLS1.1/TLS1.2
- デフォルト: TLS1.0/TLS1.1/TLS1.2
です。SSL2がサポートから外れました。また、SSL3がデフォルト値から外れました。
テストツールで、SSL2のチェックボックスにチェックを入れて接続を試すと、
0x00000057(87): パラメータが間違っています。
のエラーになると思いきやなりませんでした。
過去のアプリが動作しなくなるのを避けるために、SSL2の設定自体はできるようになっているようです。ただし、サーバーに対して、SSL2を候補として送信していないと思います。
動作確認結果としては、想定通りの結果でした。設定した(チェックした)利用プロトコルによる結果は、デフォルト値を除きWindows 10 1511と同じでした。
デフォルト値では、SSL3での通信ができなっているのを試したかったのですが、SSL3以下のみが有効化されているサーバーを見つけれなくて試せませんでした。
- SSL2: SSL2が有効化されているサーバーを見つけることができず、テストできなかった。SSL2はサポートされていませんが、パラメーターエラーにはなりませんでした。
- SSL3: SSL3/TLS1.0の両方など、SSL3が有効化されたサーバーと通信できました
- TLS1.0: TLS1.0が有効化されたサーバーと接続できました
- TLS1.1: TLS1.1が有効化されたサーバーと通信できました
- TLS1.2: TLS1.2が有効化されたサーバーと通信できました
- Default: TLS1.0のみ、SSL3/TLS1.0の両方、TLS1.2のみなど、TLS1.0またはTLS1.1またはTLS1.2のどれか一つ以上が有効化されたサーバーで通信できました
以上、テストツールを使用したWinHttp APIセットの動作確認結果でした。