2014-07-16 30 views
0

我有以下從http://web-gmazza.rhcloud.com/blog/entry/cxf-sts-tutorial的例子中CXF-STS應用程序的工作沒有證書。我能夠生成SAML斷言,但它在遇到服務提供者時失敗。CXF服務拋出WSSecurityException:沒有發現用於解密(KEYID)

我在服務的PasswordCallback如,

@Override 
    public void handle(Callback[] callbacks) throws IOException, 
      UnsupportedCallbackException { 
     for (int index = 0; index < callbacks.length; index++) { 
      WSPasswordCallback pc = (WSPasswordCallback)callbacks[index]; 
      int usage = pc.getUsage(); 
      if (usage == WSPasswordCallback.DECRYPT || usage == WSPasswordCallback.SIGNATURE) { 
       String pass = (String) passwords.get(pc.getIdentifier()); 
       if (pass != null) { 
        pc.setPassword(pass); 
        return; 
       } 
      } 
     } 

的WSPasswordCallback型被發現,作爲祕密密鑰或東西,但not WSPasswordCallback.DECRYPT or WSPasswordCallback.SIGNATURE

標識符在上面的代碼調試時顯示爲_0bfaf221-9588-4033-b3fa-db9ecbd478fe或某些隨機文本。在服務提供商我有對稱的KeyType結合 - 爲

<sp:SymmetricBinding> 
       <wsp:Policy> 
        <sp:ProtectionToken> 
        <wsp:Policy> 
         <sp:IssuedToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
          <sp:RequestSecurityTokenTemplate> 
           <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1</t:TokenType> 
           <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey</t:KeyType> 
           <t:KeySize>256</t:KeySize> 
          </sp:RequestSecurityTokenTemplate> 
          <wsp:Policy> 
           <sp:RequireInternalReference/> 
          </wsp:Policy> 
          <sp:Issuer> 
           <wsaw:Address>http://localhost:8080/StsService/services/STS</wsaw:Address> 
           <wsaw:Metadata> 
           <wsx:Metadata> 
            <wsx:MetadataSection> 
             <wsx:MetadataReference> 
              <wsaw:Address>http://localhost:8080/StsService/services/STS/mex</wsaw:Address> 
             </wsx:MetadataReference> 
            </wsx:MetadataSection> 

在STS SymmetricKey結束我提供加密服務提供者的公鑰

<bean id="utSTSProperties" 
     class="org.apache.cxf.sts.StaticSTSProperties"> 
     <property name="signaturePropertiesFile" value="springconfig/keystore.properties"/> 
     <property name="signatureUsername" value="${stskeyalias}"/> 
     <property name="callbackHandlerClass" value="com.security.sts.security.StsPasswordCallbackHandler"/> 
     <property name="encryptionUsername" value="${serverkeyalias}" /> 
     <property name="encryptionPropertiesFile" value="springconfig/keystore.properties" /> 
     <property name="issuer" value="cieron"/> 
    </bean> 

http://mail-archives.apache.org/mod_mbox/cxf-users/201112.mbox/%[email protected].com%3E和建議http://coheigea.blogspot.in/2011/05/ws-trust-sample-in-talend-service.html

我不確定服務提供程序是如何使用對稱密鑰的,因爲它已被加密。

我已經檢查了所有相關文件,一切似乎完好無損。我有我的例子https://github.com/sampleref/CXFSecurity作爲參考。運行客戶端時出現錯誤,服務提供商日誌顯示

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: org.apache.wss4j.common.ext.WSSecurityException: No certificates were found for decryption (KeyId) 
    at org.apache.wss4j.dom.processor.EncryptedKeyProcessor.getCertificatesFromEncryptedKey(EncryptedKeyProcessor.java:372) 
    at org.apache.wss4j.dom.processor.EncryptedKeyProcessor.handleToken(EncryptedKeyProcessor.java:137) 
    at org.apache.wss4j.dom.saml.WSSSAMLKeyInfoProcessor.processSAMLKeyInfo(WSSSAMLKeyInfoProcessor.java:80) 
    at org.apache.wss4j.common.saml.SAMLUtil.getCredentialFromKeyInfo(SAMLUtil.java:225) 
    at org.apache.wss4j.common.saml.SAMLUtil.getCredentialFromSubject(SAMLUtil.java:152) 
    at org.apache.wss4j.common.saml.SamlAssertionWrapper.parseSubject(SamlAssertionWrapper.java:672) 
    at org.apache.wss4j.dom.processor.SAMLTokenProcessor.handleSAMLToken(SAMLTokenProcessor.java:193) 
    at org.apache.wss4j.dom.processor.SAMLTokenProcessor.handleToken(SAMLTokenProcessor.java:79) 
    at org.apache.wss4j.dom.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:427) 
    at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:257) 

未找到任何證書。請提供一些建議

感謝

回答

0

你STS +服務密鑰庫似乎包含不同的鍵...

STS:

serverkeyalias,13 - 07月2014年,trustedCertEntry, 證書指紋( SHA1):45:4E:EB:4C:35:89:17:E6:A4:0E:94:FB:61:9B:81:83:FB:A0:82:B1

服務器:

個serverkeyalias,12-JUL-2014,PrivateKeyEntry, 證書指紋(SHA1):B8:E6:BA:A5:07:24:69:B3:5E:08:2F:A3:CE:97:D8:2E: E2:E1:31:F8

科爾姆。

+0

謝謝科爾姆,用於識別錯誤和建議。最後,我可以設置完整的WSC-> STS-> WSC-> WSP流程 – Chakri

相關問題