HttpClient请求https认证问题

   服务端在使用HttpClient调用https服务时,会抛出PKIX path building failed异常,该异常为认证证书的问题,有两种解决方法:

###1.设置默认信任

   直接上代码:


//**
* enableSSL:https认证
 * @param httpclient
 * @param serverPort
 * @return
 */
	public static HttpClient enableSSL(HttpClient httpclient, Integer serverPort) {
		TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
				return null;
			}
			public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {}
			public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {}
		}};
		try {
			SSLContext sc = SSLContext.getInstance("SSL");
			sc.init(null, trustAllCerts, null);
			SSLSocketFactory sf = new SSLSocketFactory(sc, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
			ClientConnectionManager ccm = httpclient.getConnectionManager();
			SchemeRegistry sr = ccm.getSchemeRegistry();
			sr.register(new Scheme("https", serverPort, sf));
			httpclient = new DefaultHttpClient(ccm, httpclient.getParams());
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		return httpclient;
	}

###2.生成证书    生成证书代码:

http://www.oschina.net/code/snippet_12_4092

   运行后将生成的jssecacerts文件放到服务器的JAVA_HOME环境下即可

转载于:https://my.oschina.net/u/1161660/blog/806986

在.NET中,HttpClient类通常用于发起HTTP请求。当使用HttpClient访问HTTPS资源时,默认情况下会进行SSL/TLS证书验证。但是,在某些特定的开发或测试场景中,你可能需要忽略SSL证书的验证。虽然在生产环境中忽略SSL证书验证是不安全的,但在控制环境下,可以通过以下几种方式来实现忽略HTTPS的证书认证: 1. 使用WebClient类: WebClient类允许你在创建实例时通过设置`ServicePointManager.ServerCertificateValidationCallback`委托来忽略SSL证书验证。 ```csharp using (var client = new WebClient()) { ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; // 发起请求的代码 } ``` 2. 使用HttpClient和自定义的HttpClientHandler: HttpClientHandler类允许你通过设置`ServerCertificateCustomValidationCallback`委托来实现相同的效果。 ```csharp var handler = new HttpClientHandler(); handler.ServerCertificateCustomValidationCallback = delegate { return true; }; var client = new HttpClient(handler); // 发起请求的代码 ``` 3. 使用HttpWebRequest和ServicePointManager: 在.NET Framework中,你也可以使用`HttpWebRequest`类和`ServicePointManager`来忽略证书验证。 ```csharp ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; var request = (HttpWebRequest)WebRequest.Create("https://example.com"); // 发起请求的代码 ``` 请注意,上述方法虽然能够忽略SSL证书验证,但这会使应用程序容易受到中间人攻击,因此只应在完全信任的内部网络或测试环境中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值