除了我添加
之外,我按spring saml tutorial中所述完成了所有操作<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
在pom.xml中克服w3.dom类未找到问题。当我运行示例项目时,我得到了
浏览器中HTTP Status 401 - Authentication Failed: Error decoding incoming SAML message
,同时控制台中(CertPathPKIXTrustEvaluator.java:81) ERROR org.springframework.security.saml.trust.MetadataCredentialResolver - PKIX path construction failed for untrusted credential: [subjectName='CN=idp.ssocircle.com' |credential entityID='https://idp.ssocircle.com']: unable to find valid certification path to requested target
。
第2天:
我运行keytool -importcert -alias identtrustca -file ca.cer -keystore samlKeystore.jks
并用新生成的security/samlKeystore.jks
替换securityContext.xml
。 <bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="nalle123"/>
<constructor-arg>
<map>
<entry key="apollo" value="nalle123"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="apollo"/>
</bean>
:
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:117)
... 57 more
Caused by: java.security.UnrecoverableKeyException: Password verification failed
... 61 more
然后我有:
keytool
然后我使用我在使用<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="123456"/>
<constructor-arg>
<map>
<entry key="apollo" value="123456"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="apollo"/>
</bean>
时输入的密码更改密码:
Servlet.service() for servlet [jsp] in context with path [/spring-security-saml2-sample] threw exception
java.lang.RuntimeException: Key for alias apollo not found
at org.springframework.security.saml.metadata.MetadataGenerator.getServerKeyInfo(MetadataGenerator.java:201)
然后控制台说:
apollo
所以我将identtrustca
更改为<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="123456"/>
<constructor-arg>
<map>
<entry key="identtrustca" value="123456"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="identtrustca"/>
</bean>
:
Servlet.service() for servlet [jsp] in context with path [/spring-security-saml2-sample] threw exception
java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
和控制台说:
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="123456"/>
<constructor-arg>
<map/>
</constructor-arg>
<constructor-arg type="java.lang.String" value="identtrustca"/>
</bean>
然后我读了this和this,所以我删除了entry元素(我相信它是私钥的东西),它变成了:
Servlet.service() for servlet [jsp] in context with path [/spring-security-saml2-sample] threw exception
java.lang.RuntimeException: Key with alias identtrustca doesn't have a private key
现在问题变成了:
keytool -list -V -keystore d:\temp\samlKeystore.jks
第2天第2部分:
现在我明白了,我应该只使用旧的samlKeystore.jks而不是创建一个新的密钥库。如果使用openssl s_client -connect idp.ssocircle.com:443 -showcerts
,可以看到它包含3个项目(原来它有2个)。
我不明白为什么SP从IdP元数据中获取公钥,但仍然需要IdP的ca.cer?我相信来自auth网站的ca.cer是IdP的证书,虽然它与我Error decoding incoming SAML message
此外,现在我没有获得HTTP Status 401 - Authentication Failed: Response issue time is either too old or with date in the future
,而是获得gradle
第3天 当我启动SP时,从chrome和firefox访问http://localhost:8080/spring-security-saml2-sample/,当我在一个资源管理器中按下全局注销,然后刷新另一个时,它不显示注销页面。我想SSO,来自同一个SP的全局注销应该忽略多个会话,例如,一旦我在一个“登录”中全局注销,我应该自动注销另一个,我应该看到一个注销页面另一个探险家(如果我刷新)。实际上,对于多个SP,一个我在一个注销,我应该能够在我登录的所有SP中看到注销。
第二天 通过更改saml项目URL,需要修改idp.ssocircle.com中的元数据(管理元数据)。否则,idp网站会显示错误。这是用docs / reference / htmlsingle / index.html
编写的答案 0 :(得分:2)
IDP元数据中的证书用于对SAML XML文档进行数字签名。您的故障来自的证书来自www.ssocircle.com的HTTPS端点,您的Spring SAML在工件解析期间调用该端点。这两个证书通常是不同的。
SSOCircle最近更改了为www.ssocircle.com颁发证书的证书颁发机构,SAML ERROR: PKIX path construction failed for untrusted credential中描述的操作是让CA信任。
您的最新错误可能是因为您的Spring SAML计算机没有时间正确同步。