私はSSL接続を処理するためにMicrosoft Crypto APIを使用しています。 TLS 1.0以上をサポートしているサーバーと通信すると問題なく動作しますが、SSL 3.0のみをサポートするサーバーを処理しようとすると、エラーコード0x80090331(SEC_E_ALGORITHM_MISMATCH
)で失敗します。InitializeSecurityContext()
SSL/TLSプロトコルのフォールバックメカニズム
AcquireCredentialsHandle()
に渡されたSCHANNEL_CRED
構造で遊ぼうとしましたが、これはpAuthData
引数です。特に、サポートされているプロトコルのセットを制御するはずのフィールドgrbitEnabledProtocols
を持っています。 grbitEnabledProtocols=SP_PROT_SSL3
を設定すると、すべて正常に動作しますが、TLS 1.0,1.1および1.2もサポートしたいのでセキュリティが壊れ、セキュリティ上の理由からSSL 3.0が無効になっているサーバーと通信できなくなります。
だから、問題は次のとおりです。
私はgrbitEnabledProtocols=SP_PROT_SSL3TLS1_X
を設定するだけでSSL 3.0をサポートするサーバーと通信しようとすると、接続がTLS 1.2として始まり、その後、サーバは、SSL 3.0ヘッダと適切なデータで応答します。ここから、RFCによれば、Crypto APIはSSL 3.0プロトコルを使用してハンドシェーク手順を続行する必要がありますが、代わりにエラー0x80090331
(SEC_E_ALGORITHM_MISMATCH
、クライアントとサーバーは共通のアルゴリズムを持っていないため通信できません)
MS Crypto APIでSSL 3.0とともにTLS 1.0,1.1、1.2を有効にする方法はありますか?
>私はプロトコルを指定しようとしましたが、詳細には問題に記載されています。あなたはgrbitEnabledProtocolsを含む部分を読んだことがありますか?サポートされているプロトコルを指定する場所です。 2>すべてのプロトコルと暗号化が含まれていましたが、機能しませんでした。 OpenSSLに同じ問題があることが判明しました。少なくとも同じ質問のスレッドがあります。http://openssl.6102.n7.nabble.com/Need-inputs-suggestions-on-SSL-TLS-protocol-version -fallback-mechanism-td25597.html –