handshakefailure错误的原因及如何解决
Rehandshakefailure错误的原因及如何解决
我是用的服务器是阿里云服务器,不知道在服务器上需要做什么特殊设定吗?
-------------------------
Rehandshakefailure错误的原因及如何解决
后续进展:
我已经在自己服务器,配好了从globalsign拿到的证书,
自己的web应用已经可以走https访问了,
但是调钉钉api的时候,还是一样的错误。
-------------------------
回 8楼君信的帖子
不好意思,各位,休假刚回来。
问题没有解决,还得继续问啊。
>你说的本地跑,和在钉钉里面作为微应用跑是什么意思?你是在微应用里面直接请求的oapi.dingtalk.com/gettoken吗
在本地跑的意思是:在自己机器上,启动Tomcat,里面运行我的Web应用后,然后通过浏览器来请求这个URL,
在这个URL相对应的Java Controller里面,我要使用代码(Apache HttpClient)来调,
在这种情况下,是可以取到access_token的。
在钉钉里面作为微应用跑是什么意思:之后,我把我的Web应用部署到阿里云服务器上,
无论是通过浏览器直接请求这个URL,
还是把这个URL设置到钉钉的微应用里来启动,都会报handshake_failure的错误。
-------------------------
回 10楼z豹的帖子
多谢提示。
我试了一下,还是会出一样的问题。没有解决。
不知是不是我调用的问题。
代码如下:
HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() { public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { return true; } }); HttpResponse response = null; CloseableHttpClient httpClient = HttpClients.createDefault(); // 建立连接 List parameters = new ArrayList(); parameters.add(new BasicNameValuePair('corpid', 'XXXXXX')); parameters.add(new BasicNameValuePair('corpsecret', 'XXXXXX')); String query = URLEncodedUtils.format(parameters, 'UTF-8'); HttpGet getRequest = new HttpGet('Https://oapi.dingtalk.com/gettoken?' + query); // POST请求请在HTTP Header中设置 Content-Type:application/json,否则接口调用失败 getRequest.addHeader('Content-type', 'application/json'); logger.info('url=' + getRequest.getURI().toString()); response = httpClient.execute(getRequest);// 跑到这里报错了。
还望提示。
-------------------------
Rehandshakefailure错误的原因及如何解决
今天查来查去总算把问题解决了。
出现这个错误的原因是,我从服务器请求是,默认的SSL协议版本和钉钉服务器端可以接受的SSL协议版本对不上,导致的。
请求之前,加一段下面的代码,就OK了。
另,感谢大家的帮助。
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { } } }; // 'TLSv1.2'不正确的话,会出现'Received fatal alert: handshake_failure'异常 // Ref:logback.qos.ch/manual/usingSSL_ja.html SSLContext sc = SSLContext.getInstance('TLSv1.2'); sc.init(null, trustAllCerts, new java.security.SecureRandom()); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc); CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
赞0
踩0