`
binge520cn
  • 浏览: 23204 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

https协议如何通过X509TrustManager接口实现自己创建的证书

    博客分类:
  • java
阅读更多

开通了一个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;
	}

 

分享到:
评论

相关推荐

    Android通过https协议与服务器端进行通信

    2. 需要实现 HostnameVerifier 和 X509TrustManager 两个接口,以便验证服务器的身份和 SSL 证书的验证。 3. 需要初始化 X509TrustManager 中的 SSLContext,以便 javax.net.ssl.HttpsURLConnection 设置默认的 ...

    Java下载https文件并上传阿里云oss服务器

    在提供的代码示例中,创建了一个名为`X509TrustUtil`的类,该类实现了`X509TrustManager`接口。`X509TrustManager`是Java安全模型的一部分,负责检查服务器的证书是否可信。在`X509TrustUtil`中,三个方法`...

    HTTPS_Certificate.zip_https_java https _证书

    `X509TrustManager`接口负责检查服务器的证书是否可信,通常在默认情况下,Java的SSL/TLS实现只信任那些被系统信任的CA签发的证书。 在Java中,如果你想要允许所有证书,你可以创建一个信任管理器,它不执行任何...

    java实现读取证书访问https接口

    例如,`java.security.cert.CertificateFactory`用于创建证书,`java.security.cert.X509Certificate`则表示具体的X.509证书。 当访问HTTPS接口时,Java的`javax.net.ssl.HttpsURLConnection`是关键。此连接类负责...

    装饰者模式的典型应用。

    在实际的Java SSL编程中,通过装饰者模式,我们可以根据需要创建各种定制化的X509TrustManager实现,以满足特定的安全策略,如允许某些特定的不受信任的证书,或者执行更严格的证书链验证等。这样的设计使得系统更具...

    https协议下的文件下载

    在IT行业中,网络通信的安全...总之,HTTPS协议为文件下载提供了安全保障,而Java中的HttpsURLConnection类则提供了便捷的接口来实现这一过程。通过理解这些基础知识,开发者可以更好地构建安全、可靠的文件下载系统。

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    然后,我们需要使用X509TrustManager来忽略证书验证过程。最后,我们可以使用自定义的HttpClient来发送POST请求。 在使用HttpClient发送POST请求时,我们需要关心两个方面的问题:一是如何忽略证书验证过程,二是...

    Android代码-基于ssl(安全套接层)的安全传输信任X。509证书。.zip

    通过继承X509TrustManager接口,我们可以覆盖其方法来接受我们的自定义证书。例如,我们可以创建一个`MyTrustManager`类,重写`checkServerTrusted`方法,在其中添加对自定义证书的信任逻辑。 然后,在应用程序中...

    Java Https请求,跳过证书,直接访问

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在互联网上安全传输数据的协议,它基于HTTP,但提供了额外的安全性层,通过SSL/TLS(Secure Sockets Layer/Transport Layer Security)来加密...

    通过HTTPClient访问启用SSL的Quickr REST API

    在Java的SSL体系结构中,`X509TrustManager`接口用于验证服务器证书。默认的`X509TrustManager`会严格执行证书链的验证,但`EasyX509TrustManager`可以放宽这些限制,例如,它可以接受任何自签名的或者未在信任库中...

    Android访问Https服务

    这可以通过实现X509TrustManager接口并覆盖checkServerTrusted()方法来完成。以下是一个简单的示例: ```java public class MyTrustManager implements X509TrustManager { @Override public void ...

    https客户端java实现工具类

    在Java中,`javax.net.ssl.TrustManager`接口及其子接口`X509TrustManager`用于管理SSL/TLS的信任策略。当服务器证书不受默认信任库信任时,我们可以自定义`TrustManager`来接受特定的证书。`UMBX509TrustManager`...

    Android使用OkHttp访问自签名证书的接口

    总结,通过创建自定义的`TrustManager`和`SSLSocketFactory`,并配合OkHttp的配置,我们可以让Android应用在使用OkHttp时接受自签名证书的HTTPS接口。这种方式在开发和测试阶段非常有用,但在部署到生产环境时,应...

    WebService绕过https证书认证方法.pdf

    在提供的代码片段中,创建了一个名为`miTM`的内部类,实现了`X509TrustManager`接口。`X509TrustManager`的`checkServerTrusted`方法通常会检查证书链是否可信任,但在这里,我们简单地让它返回,从而跳过了验证。 ...

    android 7.0 SSLsocket

    通常,这涉及到实现X509TrustManager接口并覆盖其检查方法。 3. **主机名验证**:除了证书验证外,还需要检查SSL连接的目标主机名是否与证书中的主题匹配。这可以通过重写DefaultHostnameVerifier或使用自定义的...

    Https请求验证工具类

    1. **自定义TrustManager**:在Java中,我们可以实现`X509TrustManager`接口,允许我们自定义证书验证逻辑,例如,接受自签名证书或特定的不受信任的CA签发的证书。 2. **禁用SSL验证**:在某些测试或调试场景下,...

    java 证书的加密与解密

    2. 创建证书:使用`X509Certificate`创建自签名证书或者通过`CertificateFactory`从已有的证书文件中读取。 3. 加载证书:`KeyStore`类用于存储和加载证书及密钥对。 4. 配置SSL上下文:`SSLContext`使用`KeyManager...

    安卓实现 Okhttp https注册登录

    builder.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]); builder.hostnameVerifier((hostname, session) -> true); return builder.build(); } catch (Exception e) ...

    JAVA利用HttpClient进行HTTPS接口调用的方法

    Java中使用HttpClient进行HTTPS接口调用的方法是通过继承DefaultHttpClient类,忽略证书校验过程。首先,创建一个SSLClient类,继承DefaultHttpClient类,并在构造函数中初始化SSLContext和TrustManager。然后,使用...

    使用httpclient无需证书调用https的示例(java调用https)

    // 忽略证书验证的X509TrustManager public class NoOpTrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws ...

Global site tag (gtag.js) - Google Analytics