httpsclient 自动获取证书 无证书访问

首先实现写一个 实现接口SecureProtocolSocketFactory的类。

/**
 *ClassName: bcde
 *date: 2015年2月26日 下午4:51:01
 *
 *@author limh
 *@since JDK 1.7
 */
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;

/**
 * MySecureProtocolSocketFactory.java.java Create on 2012-9-26下午1:15:03
 *
 *
 * Copyright (c) 2012 by MTA.
 *
 * @author lmeteor
 * @Email [email protected]
 * @description 自定义的socket factory 实现自动接受证书
 * @version 1.0
 */
public class MySecureProtocolSocketFactory implements
        SecureProtocolSocketFactory {

    private SSLContext sslcontext = null;

    private SSLContext createSSLContext() {
        SSLContext sslcontext = null;
        try {
            sslcontext = SSLContext.getInstance("SSL");
            sslcontext.init(null,
                    new TrustManager[] { new TrustAnyTrustManager() },
                    new java.security.SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        return sslcontext;
    }

    private SSLContext getSSLContext() {
        if (this.sslcontext == null) {
            this.sslcontext = createSSLContext();
        }
        return this.sslcontext;
    }

    public Socket createSocket(Socket socket, String host, int port,
            boolean autoClose) throws IOException, UnknownHostException {
        return getSSLContext().getSocketFactory().createSocket(socket, host,
                port, autoClose);
    }

    public Socket createSocket(String host, int port) throws IOException,
            UnknownHostException {
        return getSSLContext().getSocketFactory().createSocket(host, port);
    }

    public Socket createSocket(String host, int port, InetAddress clientHost,
            int clientPort) throws IOException, UnknownHostException {
        return getSSLContext().getSocketFactory().createSocket(host, port,
                clientHost, clientPort);
    }

    public Socket createSocket(String host, int port, InetAddress localAddress,
            int localPort, HttpConnectionParams params) throws IOException,
            UnknownHostException, ConnectTimeoutException {
        if (params == null) {
            throw new IllegalArgumentException("Parameters may not be null");
        }
        int timeout = params.getConnectionTimeout();
        SocketFactory socketfactory = getSSLContext().getSocketFactory();
        if (timeout == 0) {
            return socketfactory.createSocket(host, port, localAddress,
                    localPort);
        } else {
            Socket socket = socketfactory.createSocket();
            SocketAddress localaddr = new InetSocketAddress(localAddress,
                    localPort);
            SocketAddress remoteaddr = new InetSocketAddress(host, port);
            socket.bind(localaddr);
            socket.connect(remoteaddr, timeout);
            return socket;
        }
    }

    // 自定义私有类
    private static class TrustAnyTrustManager implements X509TrustManager {

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
        }

        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[] {};
        }
    }
}

调用时,只需要在生成 httpclient之前,注册刚才创建的https 协议对象,之后 httpsClient的用法正常使用即可。

ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory();

//注册刚才创建的https 协议对象
Protocol.registerProtocol("https", new Protocol("https", fcty, 443));
HttpClient httpclient =  new HttpClient(); 

//httpsClient的用法正常使用

PostMethod method = new PostMethod(URL);

httpclient.executeMethod(method);
时间: 2024-10-11 09:20:47

httpsclient 自动获取证书 无证书访问的相关文章

IOS如何打越狱包xcode无证书打包ios应用

本文要介绍的是在无证书的情况下如何将自己应用打包出去在越狱设备上使用或发给第三方使用企业签名进行应用分发. 前提条件:拥有appleId账号,并且该账号已经注册开发者中心(无需花钱) 教程开始: 1.在项目属性里勾选Automatically manage signing.这里下面会出现Team属性,如果登录过appleId并创建过Team是有可选项的,下一步教大家如何创建一个Team 2.没有Team的时候会出现Add Account按钮,点击该按钮进入appleId登录页面,此时使用自己的a

nginx 自建证书以https 访问

1.生成自签名ssl证书 mkdir /ssl创建个文件夹放ssl证书openssl genrsa -des3 -out domain.key 1024#生成RSA密钥(过程需要设置一个密码,记住这个密码)openssl rsa -in ylc520.key -out ylc520_nopass.key#拷贝一个不需要输入密码的密钥文件openssl req -new -key domain.key -out domain.csr#生成一个证书请求这里会提示输入国家,地区组织,email等信息.

IIS 6.0安装SSL数字证书实现https访问

https访问某个网站的时候,服务器端和客户端传输的数据有经过加密,不会被截取,比普通的http协议安全多了.下面我来介绍一下IIS6.0下SSL的配置,以实现https的访问.有详细的过程截图说明.      1.进入网站属性,选择目录安全性,然后点击服务器证书进行证书的配置: 2.创建证书,大家到这里申请免费证书,点击继续去申请. https://testca.netca.net/apply_srv/srv_root.asp 现在不好用了 3.填写完服务器的基本信息之后,然后输入C盘下cer

利用minidwep跑PIN+跑包破解密码连接无线网络无internet访问

1.对方wlan没有连接,这种如果是他的网线没插,没有办法.如果不是,并且进入路由器查看宽带是否连接. 2.连接无线网络,但是显示无INTERNET访问,可以ipconfig查看ip.mask.gateway是否正确 由于本人网络到期,学习破解wifi,连入他人wifi,显示无INTERNET访问,由于部分无法获取ip地址,所以写批处理文件快速配置ip地址.子网掩码.网关. @echo off netsh interface ip set address name="无线网络连接" s

基于jquery的表格动态创建,自动绑定,自动获取值

最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表格.如下所示: 在实现过程中,开发人员经常采用如下方式来实现: 1)          在前台,通过js生成表格行的html字符串,然后通过jquery的after方法加到表格底部. 2)          在后台,读取数据库,然后生成表格的html字符串,然后传递给前台渲染 3)         

[原创]LoadRunner 12.02 录制脚本时提示无Internet访问,如何解决?

在使用LoadRunner 12.02 进行录制脚本时提示无Internet访问,如下图: 可以尝试以下方式解决:点击弹出框中的“Yes”即可. 若还是有问题,尝试以下方式: (1)LR12走的是证书机制,你按照我附件(图片1)中提供的运行,如下图: (2)修改IE目录,在录制设置对话框--应该程序,选择"C:\Program Files (x86)\Internet Explorer\iexplore.exe" (3)关闭防火墙 (4)关闭360相关的软件

android https遇到自签名证书/信任证书

对于CA机构颁发的证书Okhttp默认支持 可以直接访问 但是对于自定义的证书就不可以了(如:https ://kyfw.12306.cn/otn/), 需要加入Trust 下面分两部分来写,一是信任所有证书,二是信任指定证书,访问自签名的网站 一.信任所有证书 1. 在你的module 下 build.gradule里添加 dependencies { ... compile 'com.zhy:okhttputils:2.6.2' ...} 2.新建MyApplication public c

如何搭建DHCP服务器及自动获取IP地址及相关操作

DHCP服务相关理论知识 DHCP服务分为以下三点, IP地址(例:192.168.1.0) 子网掩码(例:255.255.255.0) 网关 DHCP服务的好处: 减少管理员的工作量 避免输入错误的可能 避免IP冲突 提高了IP地址的利用率 方便客户端的配置 DHCP服务的分配方式: 自动分配:分配到一个IP地址后永久使用 手动分配:由DCHP服务器管理员专门指定IP地址 动态分配:使用完之后释放该IP,供其它客户机使用 DHCP租约的过程(四个步骤):1.客户机请求IP(Discover):

git自动获取正确的ssh-key登录

按照初始设置ssh-key,git自动登录是没有问题的.但因我手贱把必要的文件删除了... Google了很久,终于找到解决问题的正确方法. 在-/.ssh/目录下创建config的文件,按照规则写上host访问制定ssh-key文件即可实现登录,规则如下: Host github.com   #指定访问的域名     HostName github.com     User git     IdentityFile ~/.ssh/github  #keygen 生成的key文件名 指定特定域名