2011-03-18 62 views
0

我們運行一個soap服務應用程序(wse 3,但也符合WCF)。 除了作爲服務本身之外,應用程序還使用帶有ssl的HttpRequest實例從第三方檢索信息。 當使用單元測試運行該HttpRequest實例時,第三方服務會識別給定的證書並且它工作得很好。 但是,當我們的soap服務應用程序在IIS中運行時,第三方不再識別該證書。具有ssl的HttpRequest:在IIS下運行時無法識別證書

HttpClient在IIS下運行時有什麼不同?它是否改變我使用HttpRequest發送的請求?我怎樣才能設置這個(配置?)?

回答

0

您似乎沒有足夠的權限在IIS內使用您的證書,您可以使用Microsoft Windows HTTP服務證書配置工具(WinHttpCertCfg.exe)來安裝客戶端證書並授予對客戶端證書的訪問權限其他用戶帳戶,如網絡服務帳戶。

欲瞭解此關於this MSDN article的更多信息。

+0

嗨apros,謝謝你的回覆。其實,我們也遇到了這個問題。從我們得到的錯誤中明顯可見(「句柄無效」)。我們可以通過向IIS用戶授予更多權限來解決此問題(就像您所建議的那樣)。目前的這個問題更進一步,請求實際到達第三方服務器但被拒絕。我們現在所得到的是:「底層連接已關閉:無法建立SSL/TLS安全通道的信任關係。」 – 2011-03-18 10:39:07

1

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.