3

別の会社のサーバーへの相互認証を使用して TCP TLS 1.0 接続を成功させる C# アプリケーションがあります。SslStream クラスを使用して実装されます。私たちは、この非常に大きな組織の多くのクライアントの 1 つにすぎません。

上記のこの TCP リンクは、TLS 1.2 + SHA2 アップグレードを受ける必要があります。私たちの側で必要なすべての手順を実行し、ローカルサーバーでのテストに成功した後でも、リモートサーバーへの接続の試みはすべて失敗しています. 長い調査の結果、TLS ハンドシェイク中に、サーバーが署名ハッシュ アルゴリズム = SHA1-RSA のオプションのみを含む証明書要求を送信していることが明らかになりました(下の図を参照)。私たちの証明書は SHA256 です。その結果、SslStream は証明書をサーバーにまったく送信せず、サーバーはこれをハンドシェイクの失敗と見なし、接続を閉じます。

TLS ハンドシェイクの失敗

この煩わしさの理由は、相手方が非常に古い (10.x) バージョンの F5 ファイアウォールを使用して SSL を終了しているためです。クライアントの SHA2 証明書をサポートしていますが、証明書要求で SHA1/RSA 署名ハッシュ アルゴリズムのみを送信します。

上記の事実を認めながらも、相手方はすぐに F5 をアップグレードすることができません。彼らは、要求された署名ハッシュ アルゴリズムを無視し、とにかく SHA256 証明書を送信することを提案しました。それらに接続している他のクライアントは、どうにかしてそれを行うことができたようです。

残念ながら、.Net の SslStream は、TLS ハンドシェイクに対してそのレベルの微調整を提供していません。

したがって、質問: SHA1RSA ベースの証明書に対するサーバーの要求をまったく無視することは可能ですか? どのようなオプションがありますか? TLS 1.2 を実装する SslStream の代替手段はありますか? オープンソースのサードパーティ ソリューションはありますか? どんな提案も役に立ちます。前もって感謝します。

4

1 に答える 1