This article給了我一個想法如何解決這個問題。 Asp.net檢查服務器證書的名稱「CN = ...」是否與服務器的域名匹配。
因此,如果外部服務器的證書不符合該規則,來自asp.net應用程序的https請求將不會信任該連接。因此,如果您沒有機會更改外部服務器的配置(第三方),則必須禁用該檢查。
可以通過將自定義委託傳遞給asp.net(主要是)靜態ServicePointManager類來關閉它。
我把位到我的HTTPS連接器類的靜態構造函數: (但是,這種檢查將在整個應用程序的任何HTTPS連接被關閉)
public class MyExternalSslServiceConnector : IMyExternalServiceConnector
{
protected string ServiceUrl { get; set; }
public X509Certificate2 SslCertificate { get; set; }
static MyExternalSslServiceConnector()
{
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
}
public MyExternalSslServiceConnector(string myExternalServiceUrl, X509Certificate2 sslCertificate)
{
this.ServiceUrl = myExternalServiceUrl;
this.SslCertificate = sslCertificate;
}
// further implementation using HttpRequest class [...]
}
親切的問候,C.
嗨apros,謝謝你的回覆。其實,我們也遇到了這個問題。從我們得到的錯誤中明顯可見(「句柄無效」)。我們可以通過向IIS用戶授予更多權限來解決此問題(就像您所建議的那樣)。目前的這個問題更進一步,請求實際到達第三方服務器但被拒絕。我們現在所得到的是:「底層連接已關閉:無法建立SSL/TLS安全通道的信任關係。」 – 2011-03-18 10:39:07