[英]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错误。
我们按照以下步骤解决问题:
从第三方服务器下载有效的SSL证书链,并将其安装在Windows中的jdk密钥库cacerts(位于C:\\ Program Files \\ Java \\ jdk1.7.0_79 \\ jre \\ lib \\ security)中。 用于遵循开源Java类从第三方URL中提取证书
要在密钥库中安装证书,可以使用以下命令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.