我参考了 Spring SAML 手册来创建私钥和导入公共证书。但我仍然面临加密/解密问题。
我已经使用手册中提到的以下命令创建了一个 JKS 文件,如下所示
用于导入 IDP 的公共证书的命令
keytool -importcert -alias adfssigning -keystore samlKeystore.jks -file testIdp.cer
用于私钥的命令
keytool -genkeypair -alias myprivatealias -keypass changeit -keystore samlKeystore.jks
私钥和密钥库的密码都定义为“changeit”
我已将 securityContext 配置如下
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="changeit"/>
<constructor-arg>
<map>
<entry key="myprivatealias" value="changeit"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="myprivatealias"/>
</bean>
我可以看到可以选择 IDP 的 idpDiscovery 页面。我也可以查看 IDP 的登录页面。但是当我提供用户凭据时,我得到了以下异常。
当 saml2:EncryptedAssertion 与 SAML 响应中的 saml2p:Status 一起发送时,会发生此异常。(类:spring-saml jar的WebSSOProfileConsumerImpl)
ERROR org.opensaml.xml.encryption.Decrypter - Error decrypting encrypted key
org.apache.xml.security.encryption.XMLEncryptionException: No installed provider supports this key: sun.security.provider.DSAPrivateKey
Original Exception was java.security.InvalidKeyException: No installed provider supports this key: sun.security.provider.DSAPrivateKey
at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1479)
at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:697)
at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:628)
at org.opensaml.xml.encryption.Decrypter.decryptUsingResolvedEncryptedKey(Decrypter.java:783)
Caused by: java.security.InvalidKeyException: No installed provider supports this key: sun.security.provider.DSAPrivateKey
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1475)
... 46 more
740323 [http-8080-2] ERROR org.opensaml.xml.encryption.Decrypter - Failed to decrypt EncryptedKey, valid decryption key could not be resolved
740324 [http-8080-2] ERROR org.opensaml.xml.encryption.Decrypter - Failed to decrypt EncryptedData using either EncryptedData KeyInfoCredentialResolver or EncryptedKeyResolver + EncryptedKey KeyInfoCredentialResolver
740325 [http-8080-2] ERROR org.opensaml.saml2.encryption.Decrypter - SAML Decrypter encountered an error decrypting element content
谁能让我知道我哪里出错了??
替代命令使用私钥生成而不是上面提到的
keytool -genkey -alias privatekeyalias -keyalg RSA -keystore samlKeystore.jks
如果我使用此命令并更新 JKS 文件,则会收到另一个异常,称为InvalidKeyException: Key is too long for unwrapping。
Caused by: java.security.InvalidKeyException: Key is too long for unwrapping
at com.sun.crypto.provider.RSACipher.engineUnwrap(DashoA13*..)
at javax.crypto.Cipher.unwrap(DashoA13*..)
at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1477)
... 46 more
41 [http-8080-1] ERROR org.opensaml.xml.encryption.Decrypter - Failed to decrypt EncryptedKey, valid decryption key could not be resolved
42 [http-8080-1] ERROR org.opensaml.xml.encryption.Decrypter - Failed to decrypt EncryptedData using either EncryptedData KeyInfoCredentialResolver or EncryptedKeyResolver + EncryptedKey KeyInfoCredentialResolver
42 [http-8080-1] ERROR org.opensaml.saml2.encryption.Decrypter - SAML Decrypter encountered an error decrypting element content
谁能帮我解决这个问题??