2016-05-14 46 views
2

我已成功配置SSO使用WSO2IS 4.6.0春天SAML Grails的插件,但是當我啓用簽名和簽名驗證這樣的:enter image description here 我見WSO2控制檯上的錯誤SSO與簽名和簽名驗證不起作用

WARN {org.wso2.carbon.identity.sso.saml.util.SAMLSSOUtil} - Signature Validation Failed for the SAML Assertion : Signature is invalid. 
DEBUG org.wso2.carbon.identity.sso.saml.util.SAMLSSOUtil} - org.opensaml.xml.validation.ValidationException: Unable to evaluate key against signature 
WARN {org.wso2.carbon.identity.sso.saml.processors.SPInitSSOAuthnRequestProcessor} - Signature validation for Authentication Request failed. 

我出口默認公鑰(wso2carbon)從WSO2密鑰庫(wso2carbon.jks),並插入證書到X509Certificate節在我的SP和IDP中繼。
這裏是我的IDP中繼:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<EntityDescriptor entityID="https://localhost:9443/samlsso" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"> 
<IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> 
    <KeyDescriptor use="signing"> 
     <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:X509Data> 
       <ds:X509Certificate>*** 
       </ds:X509Certificate> 
      </ds:X509Data> 
     </ds:KeyInfo> 
    </KeyDescriptor> 
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" 
         Location="https://localhost:9443/samlsso" 
         ResponseLocation="https://localhost:9443/samlsso"/> 
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
         Location="https://localhost:9443/samlsso"/> 
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" 
         Location="https://localhost:9443/samlsso"/> 
</IDPSSODescriptor> 
</EntityDescriptor> 

和SP的元數據:

<?xml version="1.0" encoding="UTF-8"?> 
<md:EntityDescriptor entityID="local" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> 
<md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> 
    <md:Extensions> 
     <idpdisco:DiscoveryResponse xmlns:idpdisco="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Binding="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Location="http://localhost:8080/spring-security-saml/login/auth/alias/localhost?disco=true"/> 
    </md:Extensions> 
    <md:KeyDescriptor use="signing"> 
     <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:X509Data> 
       <ds:X509Certificate> 
        **** 
       </ds:X509Certificate> 
      </ds:X509Data> 
     </ds:KeyInfo> 
    </md:KeyDescriptor> 
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://localhost:8080/***/saml/SingleLogout/alias/local"/> 
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://localhost:8080/***/saml/SingleLogout/alias/local"/> 
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="http://localhost:8080/***/saml/logout/SingleLogout/local"/> 
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> 
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> 
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> 
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> 
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat> 
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://localhost:8080/***/saml/SSO/alias/local" index="0" isDefault="true"/> 
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="http://localhost:8080/***/saml/SSO/alias/local" index="1" isDefault="false"/> 
</md:SPSSODescriptor> 
</md:EntityDescriptor> 

我擔心的是我在任何SP或IDP中繼使用錯誤的證書,還是應該以某種方式簽署。

我應該使用什麼證書作爲IdP以及SP元數據,我可以檢查它們是否有效?
如何使用從WSO2密鑰庫導出的公鑰來正確獲取它?
謝謝!

更新:即使在元數據中有不正確的證書,它也可以在5.1.0上運行,看起來像一個問題。這裏是5.1.0配置: enter image description here

+0

你爲什麼不使用IS 5.1.0這是最最近發佈的版本? 4.6是一個相當老的版本,現在大多數可用的問題現在已經修復在5.1.0 –

+0

@ChamilaWijayarathna我們將升級到5.1.0,但現在我們在4.6.0。其實我在5.1.0上試過這個,但即使元數據中的證書不正確,它仍然有效,看起來像一個問題。 –

+0

如果您可以從IS 5.1.0開始,那會更好。你能否在IS 5.1.0中安裝SP配置的屏幕截圖? – Gayan

回答

1

您必須導入您的IDP(服務器)證書作爲信任在您的SP機器。您的IDP託管爲https所以..導入IDP信任在您的自定義SP框中證書位置/ JDK cacerts中(Java\jdk1.8.0_45\jre\lib\security\cacerts),然後你可以嘗試下面的命令來檢查你的IDP描述符URL是從SP箱像訪問...

wget "YOUR_IDP_DESCRIPTOR_URL"; 
+0

@Taras Kohut alos確保您已正確映射application-security.xml文件中的密鑰和證書。 <! - 中央密鑰存儲 - > \t \t \t的 \t \t \t \t <構造帶參數的值= 「classpath:keycloak.jks」/> \t \t \t \t \t \t \t \t <構造精氨酸> \t \t \t \t \t \t \t \t \t \t \t <條目鍵= 「YOUR_ALIAS_NAME」 值= 「YOUR_PASSWORD」/> \t \t \t \t \t \t \t \t \t \t \t \t \t <構造精氨酸型= 「java.lang.String中」 值= 「prmsaml」/> \t \t \t meetarun