呵呵,弄了一早上,头都大了。说说自己的一点心得体会。
首先自己在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。就为这个问题弄了一早上。在此提醒下大家,开发环境最好是自己定义的。这个很关键,不能图省事,这个会让你忽略很多问题。
分享到:
相关推荐
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证书验证工具类
不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家
JAVA利用HttpClient进行HTTPS接口调用
HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。
C# HttpClientHelper(HttpClient工具类) 包含 同步/异步请求 返回 string/泛型类型/Xml 及一个单例模式 的 SingleHelper 适合做爬虫
以上自己测试是可行的,直接拿过去导入即可,直接用main
httpclient 实现https双向认证
HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件
https 的支持单向认证 支持多线程 支持get、post
通过HTTPClient发起HTTPS GET请求(返回值为字符串)、POST请求(返回值为JSONOBJECT),需引入fastJson的jar包
keytool所需jar包 httpclient https所需jar包
利用tomcat搭建支持ssl的服务,并由httpClient进行https访问。整个过程简单明了。 1.生成key. 2.配置tomcat支持ssl 3.利用一个简单例子用httpClient连接ssl
(完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc
http://jakarta.apache.org/commons/httpclient/ org.apache.commons.httpclient.URI org.apache.commons.httpclient.Wire org.apache.commons.httpclient.Cookie org.apache.commons.httpclient.Header org.apache.commons....
使用httpclient和httpsurlconnection两种方法访问https网址,同时分为验证证书和不验证证书两种方法
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 ...
httpClient自动接受https请求的所有证书代码,修改相应测试url,主函数运行即可
另外在项目中正好需要访问https协议的接口,而对应的服务器没有购买商业CA颁发的正式受信证书,只是做了个自签名(联想一下12306网站购票时提示的那个警告信息),默认情况下通过HttpClient访问会抛出异常。...