調用期望使用WS-Security對消息進行簽名的Web服務時,存在一個特殊問題。如果我叫用我的客戶端應用程序(使用Apache CXF),我得到一個HTTP 500錯誤消息:當調用需要簽名的Web服務時,「*證書未找到*(來自客戶端)」
*找不到證書*(來自客戶端)
而如果我打電話使用了SoapUI相同的服務,配置爲使用相同的密鑰和密鑰存儲進行簽名,它按預期工作。
我注意到CXF和SoapUI之間的<KeyInfo>
部分調用不同。有了CXF(如下所示),KeyInfo更具有<X509Data>
部分的更多細節,而SoapUI調用只包含一個簡單的<SecurityTokenReference>
。我懷疑這種差異可能是服務器無法識別用於簽名的證書的原因。
不幸的是我沒有在服務器端的控制,因此我不能在那裏做很多調查。很高興知道這是否是已知問題,並且是否有任何解決方法?
問候,奧拉
CXF:
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="KeyId-1007572087">
<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-1355509614"><ds:X509Data xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509IssuerSerial xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509IssuerName xmlns:ds="http://www.w3.org/2000/09/xmldsig#">C=SE,O=Company,CN=Company Test Corporate CA 01,SERIALNUMBER=516406-0120</ds:X509IssuerName>
<ds:X509SerialNumber xmlns:ds="http://www.w3.org/2000/09/xmldsig#">29382</ds:X509SerialNumber>
</ds:X509IssuerSerial></ds:X509Data></wsse:SecurityTokenReference></ds:KeyInfo>
了SoapUI:
<ds:KeyInfo Id="KeyId-850CCDA383426C4A1E129683271974138"><wsse:SecurityTokenReference wsu:Id="STRId-850CCDA383426C4A1E129683271974139" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:Reference URI="#CertId-850CCDA383426C4A1E129683271974137" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1"/></wsse:SecurityTokenReference></ds:KeyInfo>