当前位置: 首页 > 知识库问答 >
问题:

RestTemplate GET请求中的handshake_failure在浏览器中工作

章茂
2023-03-14
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://...": Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:673)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:635)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:556)
UriBuilder uriBuilder = UriBuilder.fromUri(URLDecoder.decode(URL, "UTF-8"));
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", "text/html,application/xhtml+xml,application/xml");
headers.add(HttpHeaders.USER_AGENT, "Mozilla...");
HttpEntity<?> entity = new HttpEntity<Object>(headers);
ResponseEntity<ResponseVO> response = restTemplate.exchange(uriBuilder.build(), 
       HttpMethod.GET, entity, ResponseVO.class);
    null
SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

也尝试了配置跳过SSL证书验证,输出相同:

TrustStrategy acceptingTrustStrategy=(X509Certificate[]chain,String authType)->

SSLContext SSLContext=org.apache.http.ssl.SSLContexts.custom().LoadTrustMaterial(null,acceptingTrustStrategy).build();

*       subject: CN=*.site.com,OU=Domain Control Validated
*       start date: May 24 08:13:23 2019 GMT
*       expire date: May 24 08:13:23 2021 GMT
*       common name: *.site.com
*       issuer: CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O="GoDaddy.com, Inc.",L=Scottsdale,ST=Arizona,C=US
sudo keytool -importcert -file filename.cer -alias randomaliasname -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit 

我使用的是Java8更新151。

尝试从@RMunge answer中添加BouncyCastleProvider的解决方案,但仍然错误

security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider

共有1个答案

黄成荫
2023-03-14

根本原因很可能是缺少对最新的基于EC的密码套件的支持,如TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

椭圆曲线密码(ECC)是由sunec提供程序实现的。要充分发挥功能,必须具备以下条件:

  • 必须在jre/lib/security/java.security中列出SUNEC,并且jdk.tls.DisabledAlgorithms的值不能包含ECDHE
  • 本机库libsunce.so/sunce.dll必须在jre/lib(Linux、Mac)或jre/bin(Windows)文件夹中可用
  • 确保JDK JCE框架使用无限策略。由于Java8U161是新的默认值,对于旧版本,您可能必须安装JCE无限强度管辖策略文件和/或在Java.security文件中进行更改。有关进一步说明,请参阅此处。
 类似资料:
  • 当我将请求发送到https://DOMAIN:443/path它在我尝试过的每个web浏览器中都能正常工作。但是当涉及到旋度(和wget)时,我得到了一个错误。我已经重新编译了openssl和curl(最新版本),没有任何更改。 curl-vvhttps://DOMAIN:443/path 输出 *TCP_NODELAY设置 *连接到DOMAIN(IPADDRESS)端口443(#0)*ALPN,

  • 问题内容: 我正在开发一个使用大量ajax的grails应用程序。如果请求是ajax调用,那么它应该给出响应(这部分正在工作),但是如果我在浏览器中输入URL,它应该带我到主页/索引页面而不是请求的页面。下面是Ajax调用的示例gsp代码。 如果我们在浏览器URL栏中键入http:// localhost:8080 / Dash / todo / list ,则控制器应重定向到http:// lo

  • 在我的php文件中,我有以下内容来创建一个带有FPDF库的PDF: 但是请求是响应这个,而不是打开一个保存对话框来保存我的PDF。 %PDF-1.3 3 0 obj<>endobj 4 0 obj<>stream x 3 R@2π35 W(çR qπw 3 t04多30 pispéz*[(hx·ääää+çó)·(j*dé7 w endstream endobj 1 0 obj /xobject<

  • 我可以发送帖子并从邮递员那里获得请求,但当我实际从浏览器发送请求时,它无法获取记录,并在控制台中显示错误“body:{ error:“Collection ' undefined ' not found”}”。 已尝试Get和Post请求,它们都在POSTMAN中提供数据作为响应,但在浏览器中不起作用。显示错误“body:{ error:“Collection ' undefined ' not

  • 后端:Express服务器,带npx create-Express-api后端 Frontend: Next.js,带npx create-react-app前端 我已经在我的根文件夹中实现了这些命令,并尝试运行npm start xxx来检查它们是否还在工作。但是它们在我的http://localhost:3000中不起作用,尽管它们在此链接中起作用http://172.27.178.192:3

  • 以下是Chrome使用的头(从DevTools获得): 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 接受编码:gzip、deflate、sdch 接受语言:en-us,en;q=0.8 授权:协商TLRMTVNTUAADAAAAAAAAAYAIOAAABKAWQBOGAAAAAWADABYA