2012-05-21 327 views
2

我遇到了一個使用SOAP 1.1連接到Java Web服務的.NET WCF客戶端的問題。該服務需要通過SSL進行傳輸級別加密,並且需要使用WS-Security協議的SOAP安全性,兩者都使用相同的證書。我已經安裝了證書,然後我可以連接到服務器,但是,當我發佈請求時,我收到HTTP 500響應。WCF客戶端使用WS-Security連接到Java SOAP Web服務

我已經能夠比較通過WCF從Web服務的開發工作示例產生的SOAP。 WCF SOAP消息具有附加的Timestamp和BinarySecurityToken元素,這些元素在所提供的示例中不存在。我對WS-Security幾乎一無所知,對WCF幾乎一無所知,所以我希望有人能指出我正確的方向。

這裏是我的應用程序的配置部分:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="JavaServiceSoapBinding" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
      useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="Certificate" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="Certificate" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://service/endpoint" 
      binding="basicHttpBinding" bindingConfiguration="JavaServiceSoapBinding" 
      contract="MyCode.MyService" name="MyServicePort" behaviorConfiguration="endpointBehavior"> 
     </endpoint> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="endpointBehavior"> 
      <clientCredentials> 
      <clientCertificate storeLocation="LocalMachine" storeName="My" findValue="A1A1A1A1" x509FindType="FindBySerialNumber"/> 
      <serviceCertificate> 
       <authentication certificateValidationMode="None" revocationMode="NoCheck"/> 
      </serviceCertificate> 
      </clientCredentials> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

這是例如SOAP頭,我從負責服務的舞伴有:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.connector.speechanalytics.ept.avaya.com/"> 
    <soapenv:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <ds:Signature Id="Signature-5" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:SignedInfo> 
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
      <ds:Reference URI="#id-6"> 
      <ds:Transforms> 
       <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      </ds:Transforms> 
      <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
      <ds:DigestValue>blablabla=</ds:DigestValue> 
      </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue> 
      blablabla= 
     </ds:SignatureValue> 
     <ds:KeyInfo Id="KeyId-blablabla"> 
      <wsse:SecurityTokenReference wsu:Id="STRId-blablabla" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <ds:X509Data> 
       <ds:X509IssuerSerial> 
       <ds:X509IssuerName>CN=Dept,OU=Product,O=Company,L=Location,ST=BLA,C=BLA</ds:X509IssuerName> 
       <ds:X509SerialNumber>1319578157</ds:X509SerialNumber> 
       </ds:X509IssuerSerial> 
      </ds:X509Data> 
      </wsse:SecurityTokenReference> 
     </ds:KeyInfo> 
     </ds:Signature> 
    </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body wsu:Id="id-6" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 

,這是SOAP消息WCF正在生產:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Header> 
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <u:Timestamp u:Id="_0"> 
     <u:Created>2012-05-21T15:02:36.448Z</u:Created> 
     <u:Expires>2012-05-21T15:07:36.448Z</u:Expires> 
     </u:Timestamp> 
     <o:BinarySecurityToken u:Id="uuid-abd451ed-9bff-4cd0-b9a6-38fcd6bf9e8b-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">blablabla==</o:BinarySecurityToken> 
     <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <SignedInfo> 
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
      <Reference URI="#_0"> 
      <Transforms> 
       <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      </Transforms> 
      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
      <DigestValue>+blablabla=</DigestValue> 
      </Reference> 
     </SignedInfo> 
     <SignatureValue>blablabla=</SignatureValue> 
     <KeyInfo> 
      <o:SecurityTokenReference> 
      <o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#uuid-abd451ed-9bff-4cd0-b9a6-38fcd6bf9e8b-1"/> 
      </o:SecurityTokenReference> 
     </KeyInfo> 
     </Signature> 
    </o:Security> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

回答

1

你有什麼細節,爲什麼服務器fai LS?消息不必完全一樣。嘗試查看http 500正文是否包含某些內容,或者供應商是否可以通過日誌告訴您。

接下來恢復到自定義綁定而不是basichttpbinding(執行此操作online automatically),並在安全元素綁定添加屬性includeTimestamp =「false」。

先嚐試這個(並獲得消息)。沒有BinarySecurityToken的工作也是可能的,但在這個階段稍微複雜一些。

+0

感謝您的幫助。 500條消息中沒有詳細信息,日誌中沒有任何內容。我試過你的工具,生成的配置導致了相同的SOAP消息。有什麼我可以配置自定義綁定,使SOAP使用正確的安全機制? –

+0

請發佈您的肥皂請求現在看起來如何以及響應如何(即使沒有詳細信息,它必須是soap:Fault xml) –

+0

SOAP請求的結構與我在上面發佈的結構相同。 HTTP響應是得到的是: HTTP/1.1 500服務器錯誤 的Content-Length:0 連接:關閉 服務器:碼頭(7.1.6.v20100715) 沒有響應體,因此沒有SOAP信封或故障。 –