美文网首页
jdk 访问 tls 异常

jdk 访问 tls 异常

作者: akka9 | 来源:发表于2019-03-12 19:48 被阅读0次

    问题1: 协议不匹配:JDK 7 访问 tls 异常, JDK8 正常

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

    JDK7 默认行为: TLS1.0
    JDK8 默认行为: TLS1.2

    测试方法:
    openssl s_client -connect www.domain.com:443 -tls1

    启动参数(需要openjdk 1.7.0_95 以上版本,或者商业的收费版本 )
    java -Djavax.net.debug=all -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

    解决方法:

    1. 让服务器端同时支持TLS1.0 TLS1.2,这样各版本的JDK 均可以正常访问。
    2. java 代码升级到 jdk 8 的环境。
    3. 修改启动参数(需要openjdk 1.7.0_95 以上版本,或者商业的收费版本 )
    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 正常

    原因:服务器进行了安全加固,只允许高强度加密算法,JDK7 默认自带的算法强度有限。

    Oracle JDK7 默认: 不包含 JCE
    Oracle JDK8 默认: 包含 AES256 等高强度算法。 最新的 jdk 202 已经自带 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 正常。

    原因: 服务器的配置不安全,只支持弱加密算法,jdk 202 默认不再支持 3DES 算法,导致 JDK8 协商出错。

    解决办法:

    1. 加固服务器端,增加强加密算法。
    2. 修改 JDK 环境,允许 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

    相关文章

      网友评论

          本文标题:jdk 访问 tls 异常

          本文链接:https://www.haomeiwen.com/subject/fucopqtx.html