当不需要任何证书访问https时,java中先实现一个MySSLProtocolSocketFactory类忽略证书的信任

package com.tgb.mq.producer.utils;

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.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class MySSLProtocolSocketFactory implements SecureProtocolSocketFactory { private static final Logger logger = LoggerFactory.getLogger(MySSLProtocolSocketFactory.class); private static SSLContext context = null; SSLContext createSSLContext() {
try {
context = SSLContext.getInstance("SSL");
context.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new SecureRandom()); } catch (NoSuchAlgorithmException e) {
logger.debug(e.getMessage());
} catch (KeyManagementException e) {
logger.debug(e.getMessage());
} return context;
} SSLContext getSSLContext() {
if (context != null) {
return createSSLContext();
} else {
return context;
} } @Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(host, port);
} @Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(host, port, localHost, localPort);
} @Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose);
} @Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort, HttpConnectionParams arg4)
throws IOException, UnknownHostException, ConnectTimeoutException {
if (arg4 == null) {
try {
throw new Exception("参数为空");
} catch (Exception e) {
logger.debug(e.getMessage());
}
} int timeout = arg4.getConnectionTimeout(); SSLSocketFactory socketFactory = getSSLContext().getSocketFactory(); if (timeout == 0) {
return socketFactory.createSocket(host, port, localHost, localPort);
} else {
Socket socket = socketFactory.createSocket(); SocketAddress localAdd = new InetSocketAddress(localHost, localPort); SocketAddress remoteAdd = new InetSocketAddress(host, port); socket.bind(remoteAdd); socket.connect(localAdd, timeout); return socket;
} } // 自定义
private static class TrustAnyTrustManager implements X509TrustManager { @Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// 重写x509TrustManager中的checkClentTrusted方法,为空默认客户端是可信的
} @Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// 重写x509TrustManager中的checkServerTrusted方法,为空默认服务器是可信的
} @Override
public X509Certificate[] getAcceptedIssuers() {
// 重写x509TrustManager中的getAcceptedIssuers方法,默认接受发行人的证书为空
return new X509Certificate[] {};
} } }

在请求的代码中加入Protocol的代码就行

        HttpClient httpClient = new HttpClient();
if (url.startsWith("https")) {
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", myhttps);
}

最新文章

  1. HMC破解控制台密码
  2. mysql密码相关
  3. java.lang.String
  4. 多线程之NSThread和NSObject
  5. 文件系统:drbd主备服务器文件同步
  6. json学习系列(5)-json错误解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
  7. 实例化Layout中的布局文件(xml)
  8. javascript js表示中文日期的经典写法
  9. 【JZOI2002】【BZOJ1477】【P1371】青蛙的约会
  10. 【LeetCode】118 & 119 - Pascal's Triangle & Pascal's Triangle II
  11. PHP 获取当前日期的上个月的日期
  12. qml学习:对象和属性
  13. C#开发SQLServer的Geometry和Geography存储
  14. ajax 实现异步请求
  15. C# 读书笔记之访问虚方法、重写方法和隐藏方法
  16. flask基础二
  17. Spring Boot整合 Thymeleaf 模板引擎
  18. laravel记住登录、设置时间
  19. Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题
  20. [SQL] SQL 修复命令

热门文章

  1. navicat premium 破解版
  2. Axure文本框验证和外部url的调用
  3. c#格林治时间实现
  4. Ubuntu18.04: GPU Driver 390.116 + CUDA9.0 + cuDNN7 + tensorflow 和pytorch环境搭建
  5. 迁移 Emacs 的自定义设置
  6. 上海MVP见面会
  7. CodeBlocks中我遇到的无法调试问题及解决方案
  8. UML介绍
  9. Python爬虫入门之Cookie的使用
  10. 数组的常用方法concat,join,slice和splice的区别,map,foreach,reduce