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]);
}
あなたの助けと時間を感謝します。ありがとう。