为了账号安全,请及时绑定邮箱和手机立即绑定

Java 算法约束检查在大小为 1024 位的密钥 RSA 上失败

Java 算法约束检查在大小为 1024 位的密钥 RSA 上失败

哔哔one 2022-06-15 16:56:54
使用以下命令生成 java 密钥库后:-keyalg RSA -keysize 2048 并使用以下命令配置 java.security 策略:jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, RSA keySize < 2048我不断收到错误:java.security.cert.CertPathValidatorException:对大小为 1024 位的密钥 RSA 的算法约束检查失败我正在使用以下命令生成 2048 位 RSA 密钥:keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore star_domain_name.jks -storetype PKCS12 -dname "CN=*.domain_name.com,OU=Engineering, O=Company Name., L=City Name, ST=State, C=US" && keytool -certreq -alias server -file star_domain_name.com.csr -keystore star_domain_name_io.jks然后我通过以下方式验证上述内容:openssl s_client -showcerts -connect localhost:443这表明:New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384Server public key is 2048 bitSecure Renegotiation IS supportedCompression: NONEExpansion: NONENo ALPN negotiatedSSL-Session:    Protocol  : TLSv1.2我还通过以下方式查看密钥库:keytool -list -v -keystore star_domain_name.com.jks这表明:Certificate fingerprints:         MD5:  67:4C:04:90:35:etc...etc...         SHA1: AD:C8:06:74:3A:F1:72:etc...etc...         SHA256: C5:D6:81:3B:C1:F7:CE:2D:43:91:06:E9:9etc...etc...Signature algorithm name: SHA256withRSASubject Public Key Algorithm: 2048-bit RSA key我到处都能看到 2048 位 RSA 密钥。但是,当我想在我的 java spring boot 应用程序中使用 java keystore 时,它一直在抱怨:原因:java.security.cert.CertPathValidatorException:对大小为 1024 位的密钥 RSA 算法约束检查失败引起:java.security.cert.CertificateException:证书不符合算法约束一旦我编辑 java.security 文件并从中删除 RSA keySize < 2048 并重新启动应用程序,一切正常......这是因为我没有导入签名的域证书吗?为什么应用程序会抱怨,尽管我清楚地为 2048 位配置了策略和 java 密钥库?我的 java 应用程序配置包含:ssl.key-store: /opt/cert_path/star_domain_name.com.jksssl.enabled: truessl.key-store-password: the_password_etc...ssl.key-store-type: PKCS12ssl.key-alias: tomcat一旦我编辑 java.security 文件并从中删除 RSA keySize < 2048 并重新启动应用程序,一切正常......这是因为我没有导入签名的域证书并且密钥库是空的吗?我对此表示怀疑。为什么应用程序会抱怨,尽管我清楚地将策略文件和 java 密钥库配置为 2048 位?java.security 文件还包含:jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024也应该调整吗?我实际上已经尝试过调整它,但没有效果......
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

只是想补充一下。通过添加启用证书调试后

-Djava.security.debug=certpath

所以,举个例子:

java -Xms64m -Xmx512m -Djava.security.debug=certpath -Dspring.config.location=config.file -jar appname.jar &>> logfile.log &

我终于明白为什么 Java 会抱怨了。显然加密的 AWS RDS 实例使用 1024 位的 SSL 证书。当我的 java 应用程序调用它时,它们会失败,因为它们的策略设置为仅接受 RSA < 2048 keySize。

我联系了 AWS 以获得进一步的指导。

如果有人正在努力解决 Java 证书问题,请使用:

-Djava.security.debug=certpath

这非常有帮助。

谢谢你。


查看完整回答
反对 回复 2022-06-15
?
慕标5832272

TA贡献1966条经验 获得超4个赞

我被这个问题困扰了很长时间,最后,我找到了解决方案。

所以每当我修改文件时java.security,它都没有效果,因为有第二个文件java.config(在 Linux 上它位于/etc/crypto-policies/back-ends/java.config:)覆盖java.security.

这由属性 (in java.security) 控制:

security.useSystemPropertiesFile=true

因此,要么将该属性更改为false,要么直接在java.config.

这对我有用!


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 520 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号