TIdSSLIOHandlerSocketOpenSSLを使用してTLS/SSL接続を開きます。私は現在、tls 1.0〜1.2をサポートしたいと考えています。sslvSSLv23を使用しているときにどのTLS/SSLプロトコルがネゴシエートされたかを確認する方法はありますか?
IOHandlerをこのように初期化します。
TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];
接続が確立されたら、どのプロトコルを使用して接続をネゴシエートできますか? (クライアントとテストサーバーの両方の構成を確実にするため、そして最終的には統計的な目的のために)
接続後にSSLContext.Method
を確認しましたが、接続後にまだsslvSSLv23
と表示されています。 SSLContext.SSLVersions
は[sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1]
を示します。
どうすればその情報を入手できますか?
'Cipher.Version'では、現在のプロトコルが使用されていないようです(または、何かが重大に欠落しています)。たとえば、クライアント上でTLS1.1のみを使用すると、 'Cipher.Version'は 'TLSv1/SSLv3'を返します。 SSL_get_versionを調べます。 –
SSL_get_versionは、私が探していた情報を私に渡しました。ありがとう。 –
@KenBourassaうーん、 'SSL_CIPHER_get_version()'はそれほど使われていませんでしたが、[documentation](https://www.openssl.org/docs/manmaster/man3/SSL_CIPHER_get_version.html)が変更されたようです私は最後にそれを見たので、動作は明らかに時間とともに変化しています。その場合は、 'SSL_get_version()'を使用してください。私は新しい財産を統合するかもしれない。 –