1、当不需要使用任何证书访问https网页时,只需配置信任任何证书
- HttpClient http = new HttpClient();
- String url = "https://payment.cib.com.cn/payment/api/rest";
- Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443);
- Protocol.registerProtocol("https", myhttps);
- PostMethod post = new PostMethod(url);
2、其中信任任何证书的类
- 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.ProtocolSocketFactory;
- /**
- * author by lpp
- *
- * created at 2010-7-26 上午09:29:33
- */
- public class MySSLProtocolSocketFactory implements ProtocolSocketFactory {
- 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访问,并且可以根据具体需求定制信任管理和异常处理机制。这对于构建安全可靠的网络应用程序至关重要。
在默认情况下,`httpclient`会使用系统提供的`TrustManager`,这会严格检查服务器证书链是否可信任。但是,我们可以通过创建一个信任所有证书的`TrustManager`实例,然后将其设置到`SSLContext`中,从而跳过证书验证...
1. 使用`InstallCert.java`获取或安装服务器的证书到本地信任存储。 2. 创建一个`KeyManagerFactory`,加载客户端的私钥和证书。 3. 创建一个`TrustManagerFactory`,通常可以设置为`TrustAllManager`,以接受任何...
代码可能包括创建一个TrustManager,用于接受任何服务器的证书,或者使用自定义的信任管理器来限制可接受的证书。此外,还需要创建一个SSLConnectionSocketFactory,它是HttpClient中的关键组件,负责建立安全的SSL/...
以下是一个使用HttpClient进行无证书验证调用HTTPS的示例。 首先,我们需要创建一个自定义的`SSLSocketFactory`,该工厂会忽略证书验证。这通常不推荐用于生产环境,因为它可能导致安全漏洞,但在测试或调试时非常...
当我们使用HttpClient进行HTTPS请求时,有时会遇到证书相关的问题,如服务器证书不受信任或未被系统信任的CA(证书权威机构)签发。本篇将详细介绍如何配置HttpClient以自动接受所有https的证书,以便在进行测试或...
HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)
3. **配置SSL上下文**:由于使用HTTPS,我们需要配置SSLContext以信任服务器的证书。这通常涉及到加载信任存储(truststore)和密钥存储(keystore),并设置相应的系统属性或者直接在`SSLContext`上设置。 4. **...
在生产环境中,应始终使用受信任的SSL证书并启用正常的SSL校验。 总结来说,HttpClient是Java中实现HTTP/HTTPS请求的强大工具,而跳过SSL证书校验的功能在开发和测试环境中非常有用。通过创建自定义的SSLContext和...
本篇文章将深入探讨如何在Java中实现读取不同格式(如cer、der、crt)的证书,以及如何使用这些证书访问HTTPS接口并获取返回数据。 首先,我们需要了解证书的基本概念。证书通常包含了公钥和一些身份信息,由受信任...
而使用`httpclient`时,你需要配置客户端的信任存储,以便接受服务器的证书,并设置SSL上下文以启用HTTPS连接。 总的来说,这个压缩包提供的`keytool`和`httpclient`相关JAR文件是进行安全的HTTPS通信的基础。理解...
1. **加载信任的CA证书**:在Java中,我们通常会使用`KeyStore`类来管理证书。首先,我们需要获取服务器的证书或其对应的CA根证书,并将其导入到Java的信任库(默认为`cacerts`)。可以使用`keytool`命令行工具进行...
如果你信任所有服务器证书(不推荐用于生产环境),可以使用以下代码: ```java SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, new TrustStrategy() { @Override public boolean is...
1. **创建自定义SSLContext**:首先,我们需要创建一个TrustManager,它信任所有证书,然后使用这个TrustManager创建一个SSLContext。 2. **配置HttpClient**:使用自定义的SSLContext和SocketFactory来配置...
这篇博客“HttpClient Https实战”很可能详细介绍了如何使用HttpClient库来处理HTTPS连接,这是在互联网安全通信中不可或缺的一部分。 HttpClient库提供了丰富的API,使得开发者可以方便地发送GET、POST等各种HTTP...
这需要设置一个`SSLContext`,并提供一个包含了信任证书的`KeyStore`。以下是一个示例: ```java KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); InputStream in = new FileInputStream...
我们将涵盖SSL证书的生成、Tomcat服务器的SSL配置以及HttpClient的使用。” 【标签】:“httpclient4.1 https ssl” 【正文】: 在现代的互联网环境中,安全的通信协议是至关重要的。HTTPS(HTTP over SSL/TLS)...
我们可以创建一个信任所有证书的TrustManager,如下所示: ```java import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; public class NoopTrustManager implements X509...
在Java编程环境中,HTTPClient库是一个非常重要的...此外,对于生产环境,通常会使用受信任的CA签发的证书,而不是自签名证书。总的来说,理解并正确实施HTTPClient的HTTPS双向认证对于保障网络通信的安全性至关重要。
如果Servlet需要HTTPS(SSL/TLS)加密,HttpClient需要配置SSLContext和TrustStrategy,处理证书和信任问题。 10. **最佳实践**: - 关闭响应实体和HttpClient实例以释放资源。 - 避免长时间持有HttpClient实例...