0

System.Net.HttpWebRequest (C# .Net 3.5) を使用してパブリック API を呼び出そうとしています。これは、証明書を使用してデータを認証および暗号化します。Windows 8.1 システムから API を呼び出すと、API 呼び出しが正常に行われていることがわかります。しかし、Windows 2003 サーバーから API を呼び出すと、以下のエラーで失敗します。

要求は中止されました: SSL/TLS セキュア チャネルを作成できませんでした。

必要な P12 ファイルと .cert (認証局) が両方のシステムに適切にインストールされています。パブリック API は TLS1.1+ プロトコルをサポートしているようです (完全にはわかりませんが、推測では、既に API サポート チームに同じことを確認するよう依頼しています)。Windows 2003 サーバーは SSLv3 または TLS1.0 のみをサポートしています。これは問題のようです。残念ながら、サーバーをアップグレードするオプションはしばらくありません。また、Net 3.5 で構築されたアプリケーションを備えたシステムに .Net 3.5 しかインストールされていません。

これを念頭に置いて、Windows Server 2003 でこの問題の根本原因を検証する方法はありますか、またはプロトコルを変更してソース コードで TLS1.1+ をサポートする方法はありますか?

.Net 4.0 には SecurityProtocol を TLS11 または TLS12 に変更するオプションがありますが、アプリケーション (アプリケーション スイートの一部) を .Net 4.0 にアップグレードできないため、それは難しいようです。



    HttpWebRequest request = new HttpWebRequest(address);

    ServicePointManager.Expect100Continue = true;
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

    X509Store store = new X509Store("My", StoreLocation.LocalMachine);

    // Open the store.
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

    X509Certificate2Collection coll = store.Certificates.Find(X509FindType.FindBySubjectName, "test", false);

    if (coll != null && coll.Count > 0)
    {
       request.ClientCertificates.Add(coll[0]);
    }

あなたの助けと時間を感謝します。ありがとう。

4

1 に答える 1

0

さらに分析を行った結果、サーバーは TLS 1.0 と SSLv3 をサポートしていることがわかりましたが、Windows 2003 もこれらのプロトコルをサポートしているにもかかわらず、アプリケーションは証明書を使用してサーバーとの通信に失敗し、同じエラーが発生していました。

IT 部門は後で <a href="https://support.microsoft.com/en-us/kb/948963" rel="nofollow">https://support.microsoft.com/en-us/kb をインストールしました/948963 AES 暗号スイートをインストールした Windows 2003 サーバーのウィンドウ パッチ。このパッチをインストールした後、通信は機能し始めましたが、断続的で一貫性がありませんでした。

最後に、http://www.chilkatsoft.com/HttpDotNet.asp で入手できる Chilkat Http コンポーネントを試してみましたこれでうまくいきました。API 呼び出しは、P12 証明書、TLS 1.0 プロトコル、および AES 暗号スイートを使用して一貫して行われています。

于 2015-05-30T18:48:21.810 に答える