jdk 訪問 tls 異常

問題1: 協(xié)議不匹配:JDK 7 訪問 tls 異常, JDK8 正常

參考文檔
https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https

JDK7 默認(rèn)行為: TLS1.0
JDK8 默認(rèn)行為: TLS1.2

測試方法:
openssl s_client -connect www.domain.com:443 -tls1

啟動參數(shù)(需要openjdk 1.7.0_95 以上版本,或者商業(yè)的收費版本 )
java -Djavax.net.debug=all -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

解決方法:

  1. 讓服務(wù)器端同時支持TLS1.0 TLS1.2,這樣各版本的JDK 均可以正常訪問。
  2. java 代碼升級到 jdk 8 的環(huán)境。
  3. 修改啟動參數(shù)(需要openjdk 1.7.0_95 以上版本,或者商業(yè)的收費版本 )
  4. 修改代碼,參考 https://www.baeldung.com/java-7-tls-v12
  5. 使用第三方的ssl 庫,比如 http://www.bouncycastle.org/java.html
    6 使用 okhttp
ConnectionSpec requireTls12 = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
    .tlsVersions(TlsVersion.TLS_1_2)
    .build();
OkHttpClient client = new OkHttpClient.Builder()
    .connectionSpecs(Arrays.asList(requireTls12))
    .build();

問題2: 加密算法不匹配:JDK 7 訪問 tls 異常, JDK8 正常

原因:服務(wù)器進行了安全加固,只允許高強度加密算法,JDK7 默認(rèn)自帶的算法強度有限。

Oracle JDK7 默認(rèn): 不包含 JCE
Oracle JDK8 默認(rèn): 包含 AES256 等高強度算法。 最新的 jdk 202 已經(jīng)自帶 JCE。
解決辦法:
下載 JDK7 JCE Policy 文件,解壓并覆蓋到 jre 目錄( jdk1.7.0_80/jre/lib/security )。

unzip -jo UnlimitedJCEPolicyJDK7.zip -d /usr/java/jdk1.7.0_80/jre/lib/security

問題3: 加密算法不匹配:JDK 8 訪問 tls 異常, JDK 7 正常。

原因: 服務(wù)器的配置不安全,只支持弱加密算法,jdk 202 默認(rèn)不再支持 3DES 算法,導(dǎo)致 JDK8 協(xié)商出錯。

解決辦法:

  1. 加固服務(wù)器端,增加強加密算法。
  2. 修改 JDK 環(huán)境,允許 3DES 算法 。
sed -i -r -e 's/3DES_EDE_CBC,\s*//' /usr/java/jdk1.8.0_202/jre/lib/security/java.security

問題4: okhttp 訪問 http/2 出錯

升級到最新版本 okhttp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容