別の HTTPS サーバーと通信する必要があるアプリに取り組んでいます。サーバーが SSL/TLS Client Hello を単純に無視する場合があります (Server Hello は返されません)。
この問題は、次のようなコードで現れます。
>curl32.exe -v -k --tlsv1 https://...
* timeout on name lookup is not supported
* About to connect() to <server> port 443 (#0)
* Trying <IP>...
* connected
* Connected to <server> (<IP>) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: ./cacert.test.pem
CApath: none
* Unknown SSL protocol error in connection to <Server>:443
* Closing connection #0
===> CURLcode is: 35
返されるコードは次のとおりです: CURLE_SSL_CONNECT_ERROR
OpenSsl から直接実行する場合は、これで問題ありません。
OpenSSL> s_client -tls1 -connect <server>:443
さまざまな組み合わせを試しました(TLS、SSLを指定するか指定しないか)。問題が発生する唯一の一般的なことは、SSL/TLS バージョンが一致していない場合です。したがって、WireShark では、TCP の下に Secure Socket Layer が表示されます。
- SSL レコード層: ハンドシェイク プロトコル: Client Hello <===
- バージョン: TLS 1.0 (0x0301)
- ...
- ハンドシェイク プロトコル: Client Hello
- ...
- バージョン: TLS 1.0 (0x0301)
サーバーから Server Hello が表示される正しいケースでは、次のように表示されます。
- TLSv1 レコード層: ハンドシェイク プロトコル: Client Hello <===
- バージョン: TLS 1.0 (0x0301)
- ...
- ハンドシェイク プロトコル: Client Hello
- ...
- バージョン: TLS 1.0 (0x0301)
それが libcurl の問題であるか、または WireShark が正しくデコードしていない可能性があるかどうかは完全にはわかりません (どちらの場合もレコード レイヤーはほぼ同じに見え、2 つのバージョン フィールドが正しいため)、libcurl が問題のように見えます。
何かご意見は?アイデア?似たような経験?どんな助けでも大歓迎です!!