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 txin0814@sina.com* @description 自定义的socket factory 实现自动接受证书* @version 1.0*/ public class MySecureProtocolSocketFactory implementsSecureProtocolSocketFactory {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);
转载于:https://www.cnblogs.com/Struts-pring/p/4301772.html
httpsclient 自动获取证书 无证书访问 验证过能直接用相关推荐
- 自动获取/更新HTTPS证书并实现Nginx代理WSS协议
自动获取/更新HTTPS证书以及实现Nginx代理WSS协议 如果说我比别人看得更远些,那是因为我站在了巨人的肩上-–牛顿 有了轮子就会事半功倍,此篇文章就是站在巨人的肩膀上做一个简单的总结. 自动获 ...
- C#中使用属性及get,set访问private字段和直接用public修饰字段的对比和理解
导语 本篇仅作为初学C#的随笔,内容较基础,适合初级水平开发者,浅谈主题中的话题,从两者的相同点,不同点,和如何选三个角度探讨,希望文章能起到抛砖引玉的作用,欢迎补充和纠正. 如果你并不想花费十分钟左 ...
- 阿里云 获取免费ssl证书 及nginx访问
一 . 打开阿里云寻找(数字证书管理服务(原SSL证书)证书服务 二 . 点击选购 进入 ssl证书 三 . 点击免费证书 立即购买 四.点击证书申请 填写证书 证书绑定域名:填写你的网站域名,如ww ...
- SSL证书配置(https访问接口, 单向认证和双向认证)
拿到SSL证书后, 如何才能解锁更多玩法? 一. SpringBoots项目配置https访问接口(直接配置) SSL协议 配置步骤 1. 获取证书/ 生成证书 2. 放置证书 3. 配置项目 pro ...
- 阿里云如何申请证书绑定域名以及域名验证
完成SSL证书购买后,需要在阿里云SSL证书控制台补全证书申请的审核资料 1.进入阿里云的控制台--------安全(云盾)-------证书服务-----我的订单:找到你的证书-----选择&quo ...
- Nginx服务器安装SSL证书实现Https访问
Https介绍 https的作用和原理及为什么要使用https请参考这篇文章 http://blog.51cto.com/11883699/2160032 基本作用是有HTTPS的时候,所有的数据传输 ...
- 2023最新acme自动申请ssl证书-HTTPS证书
安装acme.sh curl https://get.acme.sh | sh 把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便 ...
- 三种公钥密码体系(传统公开密钥体系 / 基于身份的公开密钥体系 / 基于无证书的公开密钥体系 )
公开密钥体系 分类 基于证书的公开密钥体系 基于身份的公开密钥体系 基于无证书的公开密钥体系 基于证书的公开密钥体系 第一种方案是采用证书机制实现用户的身份和用户的钥匙之间的安全对应.证书机制一般都采 ...
- 使用acme.sh撸一个免费且自动更新的HTTPS证书
前言 一直想撸一下https,最近刚好有点空,就实现了一下.之前看过一篇教你快速撸一个免费HTTPS证书的文章,通过Certbot来管理Let's Encrypt的证书,使用前需要安装一堆库,觉得不太 ...
最新文章
- Servlet3.0之二:异步特性
- Jquery mobile技术咖们走进来瞧瞧吧
- 【Webview相关问题】登陆失败之cookie陷阱
- 14.IDA-XREF(交叉引用)概述
- 《HTML5 2D游戏编程核心技术》——第1章,第1.3节特别功能
- LeetCode021 Merge Two Sorted Listss C语言
- 中国 AI 开发者真实现状:人才依赖海外引进,本科 AI 教育盛行
- 【面经】字节跳动 算法面试复盘
- 34. 丑数(C++版本)
- Ubuntu系统详细分析【1-10】
- java 图片自适应_水印宽高比例自适应图片(Java-Thumbnails)
- 最新要饭网源码1.6终极版
- 传智黑马java基础学习——day13(static、final、匿名对象、内部类、包、修饰符、代码块)
- 各种绩效考核方法的区别
- HDF5数据库和mysql数据库_hdf5文件格式使用攻略
- 【OpenCV-Python】教程:3-16 利用Grabcut交互式前景提取
- 【用户画像】应用场景
- 【JAVA】 容纳对象 Set
- EasyUI TreeGrid滚动条异常
- C标准库函数mkfifo()(进程相关函数)
热门文章
- [USACO18DEC]Fine Dining
- 获取微信昵称乱码php,Android 微信登录昵称乱码问题,及获取微信用户信息
- 洛谷 P1413 坚果保龄球
- 由sizeof 这个“管”,窥一窥C语言这只“豹”
- CMD执行SQL文件 SQL SERVER数据库
- 每天15min-HTML5(10)-表单(上)
- 卢克,学着去读源代码
- CAP迷思:关于分区容忍性
- 使用chrome控制台下载页面图片
- 狂野飙车8服务器在哪个文件夹,狂野飙车8数据包安装存放位置详解