呵呵,弄了一早上,头都大了。说说自己的一点心得体会。
首先自己在tomcat开启https,网上资料很多,基本就是把server.xml相应的8443 connector注释放开就OK了。然后用jdk的自带的工具keytool生成自定义的证书也没啥问题:
HttpClient连接tomcat https(使用私有证书)
步骤一:
在www.apache.org下载所需的类包
commons-codec-1.3.jar
commons-httpclient-3.1-rc1.jar
commons-logging.jar
步骤二:
制作证书:
keytool -genkey -alias tomcat -keyalg RSA
任意输入,最后一个提示输入回车(保证两个密码相等)否则tomcat不能启动.
步骤三:
配置tomcat
更改tomcat配置文件server.xml
加入
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:\.keystore" keystorePass="123456"
/>
其中keystoreFile是刚生成文件的带全路径的名字
keystorePass是刚才建立证书时候的名字
启动tomcat,访问https:\\localhost:8443/如果能正常看到,说明tomcat的https配置成功.
步骤四:
生成jdk能使用的证书
1,用ie导出证书(导出方法:http://www.ibm.com/developerworks/cn/opensource/os-httpclient/#N10114)
2,假设上边导出文件的名字叫tt.cer
执行(确保配置了java home)
cmd下先到你的jdk的security目录下,这个换成你的cer文件的绝对路径吧(tt.cer)
keytool -import -noprompt -keystore \carcert -alias tomcat -file tt.cer
会提示输入密码,输入刚才建立证书时输入的密码
测试代码:
package testHttpClient;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class Test {
public static void main(String[] args) throws Exception{
// normal();
ssl();
}
public static void ssl()throws Exception{
String url = "https://localhost:8443/test_https/";
get(url);
}
public static void normal()throws Exception{
String url = "https://localhost:8443/test_https/";
get(url);
}
public static void get(String url) throws Exception{
HttpClient client = new HttpClient();
GetMethod getMethod = new GetMethod(url);
//设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
//执行getMethod
int statusCode = client.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
byte[] responseBody = getMethod.getResponseBody();
System.out.println(new String(responseBody));
getMethod.releaseConnection();
}
}
然后就是我出现的问题了:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
其实这个不算什么技术问题:
我的原因是这样的:第一我以为是部署的web https 在tomcat的jdk的问题,后来想想那个事作为server的,之前的步骤已经OK,跟tomcat配置的哪个jdk,对证书认证应该没有关联的。
真正的原因很简单,就是在你编写的测试类所在的客户端。这个采用的jdk才是问题关键,我用的是Myeclipse8.0.一直采用的默认的jdk 1.6_13,哎。而我导入的证书是我另外安装的jdk。就为这个问题弄了一早上。在此提醒下大家,开发环境最好是自己定义的。这个很关键,不能图省事,这个会让你忽略很多问题。
分享到:
相关推荐
当涉及到HTTPS接口调用时,HttpClient可以处理加密通信,确保数据传输的安全性。在这个主题中,我们将深入探讨如何在Java中使用HttpClient来实现HTTPS接口调用。 首先,我们需要理解HTTPS协议。HTTPS是HTTP(超文本...
commons-codec-1.9.jar commons-logging-1.2.jar ...httpclient-4.5.3.jar httpclient-cache-4.5.3.jar httpclient-win-4.5.3.jar httpcore-4.4.6.jar httpmime-4.5.3.jar jna-4.1.0.jar jna-platform-4.1.0.jar
HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)
使用HttpClient4.5实现https请求忽略SSL证书验证工具类
标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...
HttpClient支持HTTPS协议,但需要进行一些额外的配置,如生成KeyStore和配置服务器支持SSL。 #### 1) 生成KeyStore 可以使用Java的keytool工具生成KeyStore文件,然后设置相关的密码。 #### 2) 配置Tomcat服务器...
在IT行业中,HttpClient是一个常用的Java库,用于执行HTTP和HTTPS请求。这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常...
不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家
3. 支持http和https:HttpClientUtil需要能够处理HTTP和HTTPS协议。HTTP协议不涉及数据加密,而HTTPS协议在HTTP的基础上加入了SSL/TLS层,提供数据加密和服务器身份验证,确保通信安全。HttpClient支持SSL/TLS,只需...
根据提供的文件信息,我们可以深入探讨如何使用`httpclient`库来进行`https`访问,并了解其中涉及的关键概念和技术细节。 ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `...
HttpClient是Apache基金会开发的一个Java库,用于执行HTTP和HTTPS请求。在实际的IT工作中,HttpClient是一个非常重要的工具,尤其在需要进行HTTP通信或者自动化测试时。这篇博客“HttpClient Https实战”很可能详细...
HttpClient还支持更复杂的用法,如POST请求、文件上传、Cookie管理、HTTPS通信、自定义连接管理器等。通过深入学习HttpClient,你可以更灵活地处理与Web服务器的交互,实现各种复杂的网络功能。
HttpClientHelper 对这个类进行了封装,使得开发者无需直接与HttpClient接口打交道,而是通过更简洁、易用的方法调用来实现网络通信。这提高了代码的可读性和可维护性。 单例模式是软件设计模式的一种,确保一个类...
同时,它也可以处理HTTPS连接,配置SSL上下文以实现安全通信。 7. **异步编程**:HttpClient 4.5及以上版本引入了AsyncHttpClient,支持异步非阻塞I/O,适用于高并发场景。 8. **Cookie管理**:HttpClient有一个...
7. **安全通信**:通过SSL/TLS协议支持HTTPS,确保数据传输的安全性。 三、HttpClient 4.2.1的使用示例 1. **创建HttpClient实例**: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); `...
此外,HttpClient还提供了对HTTPS的支持,确保数据传输的安全性。 1. **初始化HttpClient**: 创建HttpClient实例是使用HttpClient的第一步。通常,我们会创建一个`CloseableHttpClient`对象,这可以通过`...
HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。
"JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...
HttpClient是一个开放源代码的JAVA库,它允许开发人员执行HTTP和HTTPS协议的请求。`commons-httpclient-3.0.jar`是这个库的一个稳定版本,包含了对HTTP/1.0和HTTP/1.1协议的全面支持,以及许多实用的功能和特性。 ...
httpClient连接https 获得验证码图片示例 需要证书才能连接的那种 /* 本文所用开发工具 jak1.5.0_06 eclipse:ObjectWeb Lomboz lib: commons-codec-1.4.jar commons-logging-1.1.jar httpclient-4.0.3.jar ...