开通了一个https协议,但是不是国际认证的,自己做的证书,访问一个接口的时候比如 https:/xx.xx.xx.xx/a?c=d的时候,如果在游览器访问,需要用户确认的。如果我要模拟服务器向这个接口发送请求,就会报错误。
我的原代码是:
1 创建信任管理器
/** * 信任管理器 * * @author liufeng * @date 2013-04-10 */ public class MyX509TrustManager implements X509TrustManager { // 检查客户端证书 public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } // 检查服务器端证书 public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } // 返回受信任的X509证书数组 public X509Certificate[] getAcceptedIssuers() { return null; } }
2。httpsclient 创建证书
/** * 发送https请求 * * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET、POST) * @param outputStr 提交的数据 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; try { // 创建SSLContext对象,并使用我们指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setSSLSocketFactory(ssf); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求方式(GET/POST) conn.setRequestMethod(requestMethod); // 当outputStr不为null时向输出流写数据 if (null != outputStr) { OutputStream outputStream = conn.getOutputStream(); // 注意编码格式 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 从输入流读取返回内容 InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; StringBuffer buffer = new StringBuffer(); while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // 释放资源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); inputStream = null; conn.disconnect(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { log.error("连接超时:{}", ce); } catch (Exception e) { log.error("https请求异常:{}", e); } return jsonObject; }
相关推荐
2. 需要实现 HostnameVerifier 和 X509TrustManager 两个接口,以便验证服务器的身份和 SSL 证书的验证。 3. 需要初始化 X509TrustManager 中的 SSLContext,以便 javax.net.ssl.HttpsURLConnection 设置默认的 ...
在提供的代码示例中,创建了一个名为`X509TrustUtil`的类,该类实现了`X509TrustManager`接口。`X509TrustManager`是Java安全模型的一部分,负责检查服务器的证书是否可信。在`X509TrustUtil`中,三个方法`...
`X509TrustManager`接口负责检查服务器的证书是否可信,通常在默认情况下,Java的SSL/TLS实现只信任那些被系统信任的CA签发的证书。 在Java中,如果你想要允许所有证书,你可以创建一个信任管理器,它不执行任何...
例如,`java.security.cert.CertificateFactory`用于创建证书,`java.security.cert.X509Certificate`则表示具体的X.509证书。 当访问HTTPS接口时,Java的`javax.net.ssl.HttpsURLConnection`是关键。此连接类负责...
在实际的Java SSL编程中,通过装饰者模式,我们可以根据需要创建各种定制化的X509TrustManager实现,以满足特定的安全策略,如允许某些特定的不受信任的证书,或者执行更严格的证书链验证等。这样的设计使得系统更具...
在IT行业中,网络通信的安全...总之,HTTPS协议为文件下载提供了安全保障,而Java中的HttpsURLConnection类则提供了便捷的接口来实现这一过程。通过理解这些基础知识,开发者可以更好地构建安全、可靠的文件下载系统。
然后,我们需要使用X509TrustManager来忽略证书验证过程。最后,我们可以使用自定义的HttpClient来发送POST请求。 在使用HttpClient发送POST请求时,我们需要关心两个方面的问题:一是如何忽略证书验证过程,二是...
通过继承X509TrustManager接口,我们可以覆盖其方法来接受我们的自定义证书。例如,我们可以创建一个`MyTrustManager`类,重写`checkServerTrusted`方法,在其中添加对自定义证书的信任逻辑。 然后,在应用程序中...
在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在互联网上安全传输数据的协议,它基于HTTP,但提供了额外的安全性层,通过SSL/TLS(Secure Sockets Layer/Transport Layer Security)来加密...
在Java的SSL体系结构中,`X509TrustManager`接口用于验证服务器证书。默认的`X509TrustManager`会严格执行证书链的验证,但`EasyX509TrustManager`可以放宽这些限制,例如,它可以接受任何自签名的或者未在信任库中...
这可以通过实现X509TrustManager接口并覆盖checkServerTrusted()方法来完成。以下是一个简单的示例: ```java public class MyTrustManager implements X509TrustManager { @Override public void ...
在Java中,`javax.net.ssl.TrustManager`接口及其子接口`X509TrustManager`用于管理SSL/TLS的信任策略。当服务器证书不受默认信任库信任时,我们可以自定义`TrustManager`来接受特定的证书。`UMBX509TrustManager`...
总结,通过创建自定义的`TrustManager`和`SSLSocketFactory`,并配合OkHttp的配置,我们可以让Android应用在使用OkHttp时接受自签名证书的HTTPS接口。这种方式在开发和测试阶段非常有用,但在部署到生产环境时,应...
在提供的代码片段中,创建了一个名为`miTM`的内部类,实现了`X509TrustManager`接口。`X509TrustManager`的`checkServerTrusted`方法通常会检查证书链是否可信任,但在这里,我们简单地让它返回,从而跳过了验证。 ...
通常,这涉及到实现X509TrustManager接口并覆盖其检查方法。 3. **主机名验证**:除了证书验证外,还需要检查SSL连接的目标主机名是否与证书中的主题匹配。这可以通过重写DefaultHostnameVerifier或使用自定义的...
1. **自定义TrustManager**:在Java中,我们可以实现`X509TrustManager`接口,允许我们自定义证书验证逻辑,例如,接受自签名证书或特定的不受信任的CA签发的证书。 2. **禁用SSL验证**:在某些测试或调试场景下,...
2. 创建证书:使用`X509Certificate`创建自签名证书或者通过`CertificateFactory`从已有的证书文件中读取。 3. 加载证书:`KeyStore`类用于存储和加载证书及密钥对。 4. 配置SSL上下文:`SSLContext`使用`KeyManager...
builder.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]); builder.hostnameVerifier((hostname, session) -> true); return builder.build(); } catch (Exception e) ...
Java中使用HttpClient进行HTTPS接口调用的方法是通过继承DefaultHttpClient类,忽略证书校验过程。首先,创建一个SSLClient类,继承DefaultHttpClient类,并在构造函数中初始化SSLContext和TrustManager。然后,使用...
// 忽略证书验证的X509TrustManager public class NoOpTrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws ...