2010-12-16 58 views
9

我必須使用具有SSL證書的PHP web服務。我的.net 3.5類庫通過Visual Studio 2010中的「添加服務引用」引用webservice(WCF吧?)。無法爲具有權限「*」的SSL/TLS建立安全通道

當調用我接收的web服務的主要方法;

無法爲具有權限「{base_url_of_WS}」的SSL/TLS建立安全通道。

我嘗試了很多,像

System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); 
public bool CheckValidationResult(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    } 

,但它是行不通的。另外我的證書安裝在我自己的機器上。

*額外信息;當我在'添加服務引用'中使用wsdl位置時,會發生同樣的錯誤。在我嘗試之前,我使用了一個靜態wsdl。

alt text

+0

不受信任的證書? – TomTom 2010-12-16 17:17:16

+0

完全沒有,它剛剛發佈並簽署了 – 2010-12-16 17:23:04

+1

有什麼方法可以嘗試通過瀏覽器連接到Web服務(如查看服務元數據)?這將有助於確定問題是否與證書或WCF內部相關。 – 2011-01-12 15:42:14

回答

8

是一個不受信任的證書可能導致此。通過在瀏覽器中打開Web服務來查看Web服務的證書路徑,並使用瀏覽器工具查看證書路徑。您可能需要在調用Web服務的計算機上安裝一個或多箇中間證書。在瀏覽器中,當您進一步調查時,您可能會看到「證書錯誤」並帶有「安裝證書」選項 - 這可能是您缺少的證書。

我的具體問題是GeoTrust的GeoTrust的DV SSL CA中間證書丟失之後升級到他們的根服務器在2010年7月

https://knowledge.geotrust.com/support/knowledge-base/index?page=content&id=AR1422

14

這是確切的,我所面臨的問題。在其他一些文章中,我得到了改變配置的提示。對我來說這個工作:

<bindings> 
    <basicHttpBinding> 
    <binding name="xxxBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
+0

謝謝。運輸部分正是我所需要的!經過數小時的測試後修復它。 :) – KoalaBear 2014-08-19 08:36:01

+0

運輸線也爲我修好了。儘管我手動在代碼中添加了正確的,可信的證書,但直到在我的.config文件中添加該行時才能正確識別它。謝謝! – jozolo 2016-09-09 14:41:06

+0

同樣的問題,通過此配置設置解決。謝謝,我花了3個小時對 – 2017-06-08 12:43:39

2

確保您以管理員身份運行Visual Studio。

2

我們在調用web服務的.aspx頁面的新Web服務器上有這個問題。我們沒有將應用程序池用戶的權限授予機器證書。我們授予應用程序池用戶的權限後,問題得到修復。

0

這裏是固定的我:

1)請確保您正在運行Visual Studio作爲管理員

2)安裝並運行winhttpcertcfg。exe文件授予訪問

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384088(v=vs.85).aspx

的命令類似如下:(輸入您的證書主題和服務名稱)

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "NetworkService" 
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "LOCAL SERVICE" 
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "My Apps Service Account" 
+0

應該提到winhttpcertcfg缺少Win 2008 R2和更新的官方支持,http://serverfault.com/questions/620013/importing-a-certificate-and-granting-permissions-on- Windows的服務器-2012-R2 – 2015-11-26 13:34:55

0

當初同樣的錯誤,代碼:

X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt"); 

解決通過添加密碼:

X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt", "password"); 
0

在情況下,它可以幫助其他人,使用新的Microsoft Web Service Reference Provider tool,這是.NET標準和.NET的核心,我有以下行添加到下面綁定定義:

result.Security.Mode = BasicHttpSecurityMode.Transport; 
result.Security.Transport = new HttpTransportSecurity{ClientCredentialType = HttpClientCredentialType.Certificate}; 

這實際上是與Micha的答案相同,但代碼中沒有配置文件。

相關問題