簡體   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