2011-11-12 117 views
0

我有一個安全的WCF服務(https://開頭計算機名:sslport /服務)自行在機器託管。同一服務的不同實例部署在不同的機器上。從客戶端應用程序,我能夠通過代碼連接到這些服務,即使用ChannelFactory()和相同的端點地址。但是,如果我嘗試使用端點地址訪問服務(https:// ipaddress:sslport/services)將機器名稱替換爲機器ip地址,我收到了一些錯誤,指出「無法建立信任關係」。我知道這是由SSL證書造成的錯誤,它不能建立信任關係。如何使用託管服務的主機的IP連接到WCF服務?

是否有任何設置或任何可能的方式來把這個工作?請指導如果有人知道這一點。

回答

1

SSL證書是基於名稱,這意味着一個SSL證書時的IP地址,而不是一個名字試圖將失敗的驗證。

您可以將驗證更改爲始終成功 - 這不是一個配置,但約1-5行代碼......但這絕對不是要走的路,因爲它破壞了避風港SSL證書的全部目的首先因爲當時任何一位SSL證書(鍛造,自簽名等)將被接納爲精...

或許,如果你告訴你爲什麼會想這樣做有一個更好的選擇。

0

我用下面讓我繞過默認的驗證......

我只連接之前,我連上這個回調。

System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateRemoteCertificate); 

然後中的 'ValidatRemoteCertificate'

private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors) 
    { 
     if (policyErrors == SslPolicyErrors.None) return true; 
     if (cert.Subject == "CN=whatever.address.com") return true; 
     return false; 
    } 

您可以包括儘可能多的地址,只要你喜歡。

希望這會有所幫助!

+0

這永遠不應該在生產中使用! – Yahia

+0

葉海亞,我上面明確建議的代碼允許一個單一的名稱「whatever.address.com」,我不建議他爲每個地址返回「真」。如果你知道域名是有效的,不管證書的狀態如何,那麼肯定可以接受它(除非我錯過了某些東西)。 –