`
forsecond
  • 浏览: 47300 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Https HttpClient

阅读更多
呵呵,弄了一早上,头都大了。说说自己的一点心得体会。

首先自己在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。就为这个问题弄了一早上。在此提醒下大家,开发环境最好是自己定义的。这个很关键,不能图省事,这个会让你忽略很多问题。

1
0
分享到:
评论
1 楼 forsecond 2010-01-29  
     

相关推荐

    JAVA利用HttpClient进行HTTPS接口调用

    当涉及到HTTPS接口调用时,HttpClient可以处理加密通信,确保数据传输的安全性。在这个主题中,我们将深入探讨如何在Java中使用HttpClient来实现HTTPS接口调用。 首先,我们需要理解HTTPS协议。HTTPS是HTTP(超文本...

    http https httpclient 请求需要的jar带用例

    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 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    使用httpClient访问https+443端口号。

    标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...

    httpClient4.1入门教程

    HttpClient支持HTTPS协议,但需要进行一些额外的配置,如生成KeyStore和配置服务器支持SSL。 #### 1) 生成KeyStore 可以使用Java的keytool工具生成KeyStore文件,然后设置相关的密码。 #### 2) 配置Tomcat服务器...

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    在IT行业中,HttpClient是一个常用的Java库,用于执行HTTP和HTTPS请求。这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常...

    httpclient4.5发送https请求(验证证书)

    不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    3. 支持http和https:HttpClientUtil需要能够处理HTTP和HTTPS协议。HTTP协议不涉及数据加密,而HTTPS协议在HTTP的基础上加入了SSL/TLS层,提供数据加密和服务器身份验证,确保通信安全。HttpClient支持SSL/TLS,只需...

    httpclient来进行https访问

    根据提供的文件信息,我们可以深入探讨如何使用`httpclient`库来进行`https`访问,并了解其中涉及的关键概念和技术细节。 ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `...

    HttpClient Https实战

    HttpClient是Apache基金会开发的一个Java库,用于执行HTTP和HTTPS请求。在实际的IT工作中,HttpClient是一个非常重要的工具,尤其在需要进行HTTP通信或者自动化测试时。这篇博客“HttpClient Https实战”很可能详细...

    httpclient httpclient.jar

    HttpClient还支持更复杂的用法,如POST请求、文件上传、Cookie管理、HTTPS通信、自定义连接管理器等。通过深入学习HttpClient,你可以更灵活地处理与Web服务器的交互,实现各种复杂的网络功能。

    HttpClientHelper 工具类

    HttpClientHelper 对这个类进行了封装,使得开发者无需直接与HttpClient接口打交道,而是通过更简洁、易用的方法调用来实现网络通信。这提高了代码的可读性和可维护性。 单例模式是软件设计模式的一种,确保一个类...

    httpClient需要的jar包

    同时,它也可以处理HTTPS连接,配置SSL上下文以实现安全通信。 7. **异步编程**:HttpClient 4.5及以上版本引入了AsyncHttpClient,支持异步非阻塞I/O,适用于高并发场景。 8. **Cookie管理**:HttpClient有一个...

    httpclient4.2.1.zip

    7. **安全通信**:通过SSL/TLS协议支持HTTPS,确保数据传输的安全性。 三、HttpClient 4.2.1的使用示例 1. **创建HttpClient实例**: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); `...

    httpclient

    此外,HttpClient还提供了对HTTPS的支持,确保数据传输的安全性。 1. **初始化HttpClient**: 创建HttpClient实例是使用HttpClient的第一步。通常,我们会创建一个`CloseableHttpClient`对象,这可以通过`...

    HttpClient配置SSL绕过https证书实例

    HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    "JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    HttpClient是一个开放源代码的JAVA库,它允许开发人员执行HTTP和HTTPS协议的请求。`commons-httpclient-3.0.jar`是这个库的一个稳定版本,包含了对HTTP/1.0和HTTP/1.1协议的全面支持,以及许多实用的功能和特性。 ...

    httpClient连接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 ...

Global site tag (gtag.js) - Google Analytics