这个问题通常出现在使用Java中的HttpClient库时,与接收端(比如支付服务提供商)之间的安全连接失败。原因是Java默认使用TLSv1.2协议,而有些支付服务提供商只支持低于TLSv1.2的协议(如TLSv1.1、TLSv1.0),因此建议在HttpClient中指定支持的协议版本,示例代码如下:
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(null, new TrustSelfSignedStrategy()) //信任自签名证书
.build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1", "TLSv1.1", "TLSv1.2" }, //支持的协议版本
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
在指定支持的协议版本后,可以尝试重新建立连接。如果仍然存在问题,可能需要进一步检查服务器端和客户端的协议配置及证书配置。