2014-01-14 26 views
5

私は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プロトコルを使用してハンドシェーク手順を続行する必要がありますが、代わりにエラー0x80090331SEC_E_ALGORITHM_MISMATCH、クライアントとサーバーは共通のアルゴリズムを持っていないため通信できません)

MS Crypto APIでSSL 3.0とともにTLS 1.0,1.1、1.2を有効にする方法はありますか?

答えて

0

デバッグの一環として行うことができる2つのこと。

1>使用しているAPIでサポートされているプロトコルを指定する方法があります。

2>可能なすべての暗号化アルゴリズムとハッシングアルゴリズムを含めるようにしてください。

これらの2つのオプションは、オープンSSLで利用できます。

最も良い方法は、wiresharkを使用して、エラーコードSSLプロトコルが送信するものを正確に探すことです。

+0

>私はプロトコルを指定しようとしましたが、詳細には問題に記載されています。あなたはgrbitEnabledProtocolsを含む部分を読んだことがありますか?サポートされているプロトコルを指定する場所です。 2>すべてのプロトコルと暗号化が含まれていましたが、機能しませんでした。 OpenSSLに同じ問題があることが判明しました。少なくとも同じ質問のスレッドがあります。http://openssl.6102.n7.nabble.com/Need-inputs-suggestions-on-SSL-TLS-protocol-version -fallback-mechanism-td25597.html –

関連する問題