使用以下命令生成 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然后我通過以下方式驗證上述內(nèi)容: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也應該調(diào)整嗎?我實際上已經(jīng)嘗試過調(diào)整它,但沒有效果......
2 回答

幕布斯6054654
TA貢獻1876條經(jīng)驗 獲得超7個贊
只是想補充一下。通過添加啟用證書調(diào)試后
-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 應用程序調(diào)用它時,它們會失敗,因為它們的策略設置為僅接受 RSA < 2048 keySize。
我聯(lián)系了 AWS 以獲得進一步的指導。
如果有人正在努力解決 Java 證書問題,請使用:
-Djava.security.debug=certpath
這非常有幫助。
謝謝你。

慕標5832272
TA貢獻1966條經(jīng)驗 獲得超4個贊
我被這個問題困擾了很長時間,最后,我找到了解決方案。
所以每當我修改文件時java.security
,它都沒有效果,因為有第二個文件java.config
(在 Linux 上它位于/etc/crypto-policies/back-ends/java.config
:)覆蓋java.security
.
這由屬性 (in java.security
) 控制:
security.useSystemPropertiesFile=true
因此,要么將該屬性更改為false
,要么直接在java.config
.
這對我有用!
添加回答
舉報
0/150
提交
取消