当不需要任何证书访问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);
}

java HttpClient 忽略证书的信任的实现 MySSLProtocolSocketFactory的更多相关文章

  1. java在访问https资源时,忽略证书信任问题 (转)

    java程序在访问https资源时,出现报错sun.security.validator.ValidatorException: PKIX path building failed: sun.secu ...

  2. HttpClient忽略SSL证书

    今天公司项目请求一个接口地址是ip格式的,如:https://120.20.xx.xxx/xx/xx,报一个SSL的错: 由于之前请求的接口地址都是域名地址,如:https://www.xxx.com ...

  3. HTTP-java访问https资源时,忽略证书信任问题,代码栗子

    java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...

  4. java将SSL证书导入系统密钥库

    之前安装JIRA和Confluence,配置了SSL证书之后遇到应用程序链接的问题: SSL证书不被信任,导致JIRA和Confluence无法关联. 尝试过很多办法无果之后打算放弃. 最终还是放弃了 ...

  5. 【Java】Java与数字证书

    Java与数字证书 Java与数字证书 证书的签发和应用 证书的内容和意义 其它 证书(Certificate,也称public-key certificate)是用某种签名算法对某些内容(比如公钥) ...

  6. JAVA中SSL证书认证通讯

    JAVA中SSL证书认证通讯 SSL通讯服务端 /******************************************************************** * 项目名称 ...

  7. SSL通信-忽略证书认证错误

    .NET的SSL通信过程中,使用的证书可能存在各种问题,某种情况下可以忽略证书的错误继续访问.可以用下面的方式跳过服务器证书验证,完成正常通信. 1.设置回调属性ServicePointManager ...

  8. ubuntu google chrome 忽略证书错误 -- 解决自签名证书不支持的问题

    ubuntu chrome 打开自签名的证书的服务器的https时,提示 Your connection is not private. 错误代码:NET::ERR_CERT_AUTHORITY_IN ...

  9. 【证书】curl 和 java 请求报证书错误

    1. 说明: 以下:例子的域名因为工作环境的问题,被我拿自己的博客域名替代了,所以无法进行模拟测试,请珍重,哈哈! 2. 环境: centos:7.5 java jdk:1.8.0_74 3. cur ...

随机推荐

  1. Cocos Creator学习三:生命周期回调函数

    1.目的:学习生命周期回调函数以及回调顺序,更有利于我们逻辑的处理把控. 2.生命周期回调函数: 节点:指cc.Node:组件:指cc.Component. ①onLoad:脚本组件绑定的节点所在场景 ...

  2. linux环境下 python环境import找不到自定义的模块

    linux环境下 python环境import找不到自定义的模块 问题现象: Linux环境中自定义的模块swport,import swport 出错.swport模块在/root/sw/目录下. ...

  3. label标签内含有input元素,点击事件会触发两次

    **label标签内含有input元素,点击事件会触发两次** 如果你的结构是label内写input实现点击文字时候input也有相应.并且,把事件设置在了label上,那么就会执行两次了. //h ...

  4. c++ 查缺补漏

    c++句柄 win句柄保存对象的实时地址(对象消失,句柄消失).指针保存固定地址(对象消失,内存泄漏) 超简单句柄类 指针型句柄 管理图书类句柄 c++ 枚举 enum Suit { Diamonds ...

  5. XV Open Cup named after E.V. Pankratiev. GP of Siberia-Swimming

    给出两个点,找到过这两个点的等角螺线,并求出中间的螺线长 $c = \frac{b}{a}$ $p = a \times c^{\frac{\theta}{angle}}$ 对弧线积分 #includ ...

  6. React文档(二十三)Web Components

    React和web components是为了解决不同问题而创立的.web components为可重用组件提供了健壮的封装,而React提供了声明式的库来保持DOM和数据同步.这两点是互相补充的.作 ...

  7. day 06 编码and知识点总结

    1.day 05 内容回顾 dict:dic = {'name':'alex'} 增:dic['age']=21#存在就覆盖 dic.setdefault(),没有就增加 删除: pop()按照key ...

  8. 杨力第一次jjave作业

    感觉jave学起来比c语言难一点,格式要求较高,有更多的东西要记,但是只要认真学应该不是很难,自己应该多写程序.

  9. django自定义模板标签

    # 创建自定义模板标签目录 django_project_name app_name templatetags (创建Python Packge,注意一定要用templatetags这个名字) my_ ...

  10. python turtle库的几个小demo

    一.先上图 一个同切圆和五角星 上代码 import turtle #同切圆 turtle.pensize(2) turtle.circle(10) turtle.circle(40) turtle. ...