2011-01-26 165 views
5

Webservice的管理員給了我WSDL,兩個證書和私鑰:如何通過C#中的HTTPS使用SOAP服務?

service.wsdl 
ssl.cer 
auth_cert.pem 
auth_private_key.pem 

Visual Studio 2010中我添加了來自WSDL Web引用(服務引用不工作)。 然後我試圖使用它,因爲它是一個HTTP上的SOAP客戶端:

MySoapClient client = new MySoapClient(); 
client.Operation(); 

,我得到這個堆棧跟蹤:

Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel. 
    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

我有什麼用證書和私鑰辦?
我無法在網上找到任何教程,也沒有涵蓋此事的書籍。任何提示?

更新

訪問端點火狐

SSL peer cannot verify your certificate. (Error code: ssl_error_bad_cert_alert)

+1

@Tommaso:你應該使用服務引用。什麼沒有用? – 2011-01-26 21:18:03

+0

服務端點是否支持https連接? – 2011-01-26 21:22:02

回答

0

管理員似乎已經給你用來設置SSL服務器上的文件。您應該能夠通過WSDL.exe運行service.wsdl以生成C#代理,這是VS添加Web引用時的功能。我不認爲這是你的問題。由於異常是System.Net.WebException,因此您會看到網絡級別的問題。

其他文件看起來像管理員用來將SSL添加到服務器。通過共享私鑰,如果使用此密鑰的任何啓用SSL的服務可能會危及安全。您應該在WSDL中查找任何服務端點並嘗試通過SSL(https://)訪問瀏覽器中的服務端點。如果你不能那麼就有服務器配置問題。更正服務器上的SSL配置,並且您的WSDL應該起作用,或者至少您會遇到新問題。

6

Webservice administrator gave me WSDL, two certificates and a private key

如果您只使用該服務,則不需要私鑰。我可以猜測你希望使用https進行雙向身份驗證。如果是這種情況,它是如何工作的:

在服務器上,管理員應該使用私鑰安裝證書以啓用SSL(該密鑰在SSL握手期間使用)。它的公鑰由客戶用來檢查證書是否有效並驗證服務,所以在客戶端你需要檢查它。如果兩臺機器都在Windows域中,這很容易(可將其配置爲使用域認證機構)。如果不是,則需要用於簽署原始服務器證書的所有證書以安裝在客戶端計算機上(位於受信任的根CA存儲中)。

第二部分是對服務器的客戶端認證。您安裝客戶端證書(包含公用密鑰)到個人存儲和配置WCF代理來使用它:

<behaviors> 
    <endpointBehaviors> 
     <behavior name="certSecureBehavior"> 
      <clientCredentials> 
       <clientCertificate findValue="client-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My"/> 
       <serviceCertificate> 
        <defaultCertificate findValue="server-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="TrustedPeople"/> 
       </serviceCertificate> 
      </clientCredentials> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

配置您的端點使用此行爲。有幾個注意事項:

  • 客戶-CN是(不那麼重要)
  • 服務器-CN是用於生成服務器證書的名稱(通常是服務器DNS名稱)
  • 生成客戶端證書的名稱

這是一個非常複雜的話題,需要大量時間來研究。 檢查這篇文章http://blogs.msdn.com/b/imayak/archive/2008/09/12/wcf-2-way-ssl-security-using-certificates.aspx 希望得到這個幫助。