繁体   English   中英

SSL握手失败

[英]SSL Handshake Failure

有通过HTTPS托管的第三方Web服务,而使用Web服务时却面临SSL握手失败错误。

出于安全原因,我们无权访问第三方URL或服务,只有我们的客户才能从该环境访问。

我已经做了足够的打击和审判,但仍然没有成功。

我们的应用程序在Weblogic 9.2上运行。

第三方提供了证书(.p7b格式)。 我已将这些证书导入到javakeystore(证书)中,甚至在weblogic密钥库(demotrust.jks)中也导入了,但是仍然存在相同的错误。 我尝试了在密钥库中导入证书的不同组合,我也可以在密钥库中看到证书的条目。

即使是我们要求客户端在该环境中生成的存根(由于无法从我们的环境访问),使用HTTP存根也会生成,但使用HTTPS则会导致SSL握手失败。

我认为,如果我们解决此问题,那么应用程序也将运行。

应用程序可以在http上正常运行,但是在https上却会给出SSL握手失败错误。

我已经正确地从(.p7b转换为.cer格式,然后导入),甚至将.p7b转换为.pem到.der格式,然后导入了Java密钥库demotrust.jks,但仍然无法正常工作。

我是否缺少任何步骤,请告诉我。

我们也面临着同样的问题。 我们试图连接安装有256encryption SSL证书的第三方服务器。 当我们尝试从java(v1.7)连接它时,遇到了handhake_failure错误。

我们按照以下步骤解决问题:

  1. 从第三方服务器下载有效的SSL证书链,并将其安装在Windows中的jdk密钥库cacerts(位于C:\\ Program Files \\ Java \\ jdk1.7.0_79 \\ jre \\ lib \\ security)中。 用于遵循开源Java类从第三方URL中提取证书

  2. 要在密钥库中安装证书,可以使用以下命令keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias helloroot -file hello.cer

完成上述步骤后,问题仍然存在,然后与第三方服务器团队进行沟通后,我们了解了TLSv1.1,TLSv1.2。 第三方服务器使用并强制客户端仅通过TLSv1.1和更高版本进行连接。

我们使用的是Java 1.7和Grails 2.3.1。 在连接到HTTPS URL时,我们强制grails使用TLSv1.1。 有以下几种方法可以强制grails使用TLSv1.1或更高版本

  • 通过配置BuildConfig.groovy文件并添加jvmArgs:['-Dhttps.protocols = TLSv1.1']

    grails.project.fork = [...运行:[maxMemory:1280,minMemory:128,debug:false,maxPerm:256,forkReserve:true, jvmArgs:['-Dhttps.protocols = TLSv1.1'] ] ,。 ..]

  • 您可以在运行grails应用程序时传递-Dhttps.protocol参数

    grails运行应用程序-Dhttps.protocols = TLSv1.1

通过将证书添加到cacerts文件并将其指向weblogic,可以解决此问题。 最初,证书链未正确导入到cacerts文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM