我收到了非常流行的“SSLHandShakeException”。
我正在使用IntelliJ运行一个java客户端,该客户端旨在处理Web服务请求/响应。我们通过一组凭据和url连接到服务器并传入请求文件。
我所做的一切
>
已验证正在构造的URL是否在浏览器中工作。
使用以下说明将证书添加到信任存储区,Keytool说明
已验证truststore使用的JRE是否正确。
我正在使用httpClient对象。我将对象实例化如下,
private void initConnection()
{
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(this.target.getHostName(), this.target.getPort()), new UsernamePasswordCredentials(this.userid, this.password));
this.httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
// Be able to deal with basic auth. Generate BASIC scheme object and
// add it to the local auth cache
BasicScheme basicScheme = new BasicScheme(); // we throw an error here
this.authCache.put(this.target, basicScheme);
localContext = HttpClientContext.create();
localContext.setAuthCache(this.authCache);
}
此对象的执行如下,这也是抛出错误的代码,
responseNode = this.httpClient.execute(getTarget(), httpRequest, responseHandler);
我已尝试在过程中强制使用信任存储,如下所示,
系统setProperty(“javax.net.ssl.trustStore”,“…公共\JRE\lib\security\cacerts”);系统setProperty(“javax.net.ssl.trustStorePassword”,“changeit”);
当不涉及SSL时,适用于超文本传输协议。
除此之外,我不是SSL专家。我已经进行了相当多的挖掘,我希望有人有主意。我当然对没有正确安装证书(十几次)持开放态度,或者我可能需要添加更多代码来正确配置我的对象。如果缺少信息,我很乐意提供!
提前谢谢你。
通过使用自定义HttpClient,默认情况下它不会查看HttpClientBuilder文档中的系统信任存储:
当未显式设置特定组件时,此类将使用其默认实现。在调用build()之前调用useSystemProperties()方法时,配置默认实现时将考虑系统属性。
尝试使用
HttpClients.custom().setDefaultCredentialsProvider(credsProvider).useSystemProperties().build();
我自己也不得不处理Java客户机中的许多SSL问题,因此我理解您所遇到的错误消息中缺乏有用的细节所带来的沮丧。以下是一些您可以尝试和验证的内容。
与许多协议一样,SSL/TLS协议也有几个版本。TLS实现实际上总是向后兼容的,但由于协议的早期版本被认为不安全,许多服务器和客户端将不接受早期版本。
TLS协议规定,即使服务器的证书可能受信任,证书本身的通用名称也必须与服务器的主机名匹配。例如,如果服务器位于www.microsoft。com提供了www.google。com证书客户端将不接受连接。当人们连接到内部服务器时,这个问题往往是一个大问题,但当连接到公共服务器时,问题就不那么严重了。有一种非常简单的方法可以使用自定义SSL工厂禁用主机名验证。
我得到一个"异常在线程"主"javax.net.ssl.SSLHandshake异常:收到致命警报:handshake_failure"下面的代码。有人知道如何修复它吗?
我正在尝试打开一个htttps网站。网址是前。https://x.xx.xx.xx/.我已经写了打击代码。 字符串url=”https://x.xx.xx.xx/"; URL obj=新URL(URL); HttpURLConnection con=(HttpURLConnection)obj。openConnection(); //可选的默认值是GETcon.setRequest estmeth
我正在编写一个JMeter测试计划,以连接到SSL端口(Tomcat Connector)。在JDK8(1.8.0_51)上使用三个JMeter SSL客户端实现(HttpClient4、HttpClient3.1、Java)中的任何一个连接到SSL端口时,我会收到一个SSLHandshakeExc0019(handshake_failure)。如果我使用JDK7(1.7。0_75)-一切都像预期
我正在尝试使用Spring RestTemplate调用POST Rest调用: 这个https://server.com有证书:webapi。tartu-x86。p12我将证书导入C:\Java_8\jre\lib\security\cacerts usinf keytool 运行代码后,我出现以下错误: 我使用的是Java1.8.091 有人能帮忙吗?
Java版本1.8.0_121,我看到的解决方案仅适用于Java 9 描述: 我的目标是获取有关项目的信息,比如一个项目的总下载量有一个名为SourceForge Downloads Stats API的API。 所以我创建了一个简单的程序,将结果视为原始文本,我不需要它作为JSON。 例如,我正在获取有关ApacheOpenOffice下载和更多信息- 但是我无法使用获取数据,这是下面错误的原因
我正在尝试获得一个在android上工作的相互认证请求。我正在测试我自己的服务器,所以我有一个自签名的CA和客户端证书。 因此,我将不得不考虑不受信任的服务器证书。 以下是我正在做的: 然后使用AsyncWork来执行请求: 我已经在浏览器和iOS客户端上测试了这个请求,但我无法在Android上运行它。 我认为这是允许不受信任的服务器证书的正确方法: 不知道为什么我得到: javax.net.s