当前位置: 首页 > 知识库问答 >
问题:

Spring SAML:解密加密密钥时出错,没有安装的提供程序支持此密钥

白泽语
2023-03-14

我已经参考了Spring SAML手册来创建私钥和导入公共证书。但是我仍然面临加密/解密的问题。

我用手册中提到的以下命令创建了一个JKS文件,如下所示

用于导入IDP公共证书的命令

keytool -importcert -alias adfssigning -keystore samlKeystore.jks -file testIdp.cer

用于私钥的命令

keytool -genkeypair -alias myprivatealias -keypass changeit -keystore samlKeystore.jks

私钥和密钥存储库的密码定义为更改

我已经配置了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的登录页面。但是当我提供用户凭据时,我得到了以下异常。

当SAML响应中的saml2:EncryptedAssertion与saml2p:Status一起发送时,会发生此异常。(类别:spring saml jar的WebsProfileConsumerImpl)

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:密钥太长,无法展开。

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

有人能帮我解决这个问题吗??

共有1个答案

巫马炫明
2023-03-14

该问题是由于在应用程序中使用的密钥库与使用以下命令生成的密钥库不同所致:

keytool -genkeypair -alias privatekeyalias -keypass samplePrivateKeyPass -keystore samlKeystore.jks -keyalg RSA -sigalg SHA1WithRSA
 类似资料:
  • 我是拉威尔的新手,我正在尝试使用Artisan命令。。。 它显示。。。 Laravel开发服务器已启动:http://127.0.0.1:8000 但是,当我手动输入时,它不会自动启动http://127.0.0.1:8000 它显示了这个错误: RuntimeException未指定应用程序加密密钥。 有什么想法吗?我正在使用Laravel framework 5.5-dev。

  • 我在.NET Core2.0中创建了一个RSA加密/解密服务,目前我使用密钥库机密来保存RSA密钥。但据我所知,我可以用Key Vault密钥实现这一点,但目前还不能实现,因为KV Keys不支持2048长RSA密钥的加密/解密...这真让我摸不着头脑。 那么,我是否可以使用带有Azure Key Vault密钥的2048密钥来实现RSA加密/解密呢?

  • 我为Jetty 9和Kafka使用ssl密钥库。我需要提供密钥库和密钥密码来访问密钥库和私钥。但是,我不想在配置文件中以明文形式提供这些密码。还有哪些其他选项可以安全地提供/加密密码?每种方法的优缺点是什么?

  • 我正在考虑使用ChaCha20-Poly1305来加密/解密密码(我需要加密/解密不能只哈希)。但是,要使用此算法,我们需要使用密钥。然而,这是一个问题,因为我正在他们的设备上加密/解密用户的密码,所以在我的数据库中,我只存储他们加密的密码。 问题是,如果用户从他们的手机上卸载我的应用程序或换成新手机,我需要相同的密钥才能再次解密用户的密码。 我的问题是:如何安全地传输和存储这个密钥? 另外,如果

  • 在一个做其他事情的大型应用程序中——我需要加密和解密一个文件。所以我一直在四处寻找,并实现了这两个核心功能,基本上使用RSA密钥包装一个随机的AES密钥来加密一个文件。对称键和iv被写入文件的开头。 我在下面的解密函数部分得到一个异常(“javax.crypto.BadPaddingException:Decryption error”)。在肯安迪夫线路上——doFinal。具体来说,这一行是异常