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

问题描述 投票:1回答:1

使用以下命令生成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:大小为1024bits的密钥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-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-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: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key

我看到的每个地方都看到了2048位的RSA密钥。但是,当我想在我的java spring启动应用程序中使用java密钥库时,它会一直抱怨:

  • 引起:java.security.cert.CertPathValidatorException:大小为1024bits的密钥RSA上的算法约束检查失败
  • 引起:java.security.cert.CertificateException:证书不符合算法约束

一旦我编辑java.security文件,并从中删除RSA keySize <2048,并重新启动应用程序,一切正常......

这是因为我没有导入签名域名证书吗?尽管我明确地将策略和java密钥库配置为2048位,但为什么应用程序会抱怨?

我的java应用程序配置包含:

ssl.key-store: /opt/cert_path/star_domain_name.com.jks
ssl.enabled: true
ssl.key-store-password: the_password_etc...
ssl.key-store-type: PKCS12
ssl.key-alias: tomcat

一旦我编辑java.security文件,并从中删除RSA keySize <2048,并重新启动应用程序,一切正常......

这是因为我没有导入签名的域证书,密钥库是空的吗?我对此表示怀疑。

尽管我明确配置了2048位的策略文件和java密钥库,但为什么应用程序会抱怨?

java.security文件还包含:

jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024

这还应该调整吗?

我实际上试图调整它,但这没有效果......

java ssl keystore
1个回答
0
投票

只是想加入这个。通过添加启用证书调试后

-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

这非常有帮助。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.