解决unable to find valid certification path to requested target...的问题

今天在向服务器发送http post请求的时候出现了unable to find valid certification path to requested target的错误,百度了下需要证书啥的。解决方式是在发送http请求的时候,可以过滤掉所有的https证书验证。
代码如下:

	/**
	 * POST请求
	 * 
	 * @param url
	 * @param data
	 * @return
	 */
	public String sendPost() {
		LOG.info("send to tanggong : " + data);
		String result = null;
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//isNoSSL是否需要走特殊方法
		if(isNoSSL)  
		{  
			httpClient = (CloseableHttpClient)wrapClient(httpClient);  
		} 
		HttpPost post = new HttpPost(httpUrl);
		post.addHeader("Content-type","application/json; charset=utf-8");
		post.setHeader("Accept", "application/json");
		CloseableHttpResponse response = null;
		try {
			StringEntity sen = new StringEntity(data.toString(),Charset.forName("UTF-8"));
			sen.setContentEncoding("UTF-8");
			sen.setContentType("application/json");
			post.setEntity(sen);
			response = httpClient.execute(post);
			if (response != null && response.getStatusLine().getStatusCode() == 200) {
				HttpEntity entity = response.getEntity();
				result = EntityUtils.toString(entity);
			}
			LOG.info("ZP return :" + result);
			return result;
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				httpClient.close();
				if (response != null) {
					response.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	
	/** 
	 * 避免HttpClient的”SSLPeerUnverifiedException: peer not authenticated”异常 
	 * 不用导入SSL证书 
	 * @param base 
	 * @return 
	 */  
	public static HttpClient wrapClient(HttpClient base) {  
	    try {  
	        SSLContext ctx = SSLContext.getInstance("TLS");  
	        X509TrustManager tm = new X509TrustManager() {  
	       
				@Override
				public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
						throws java.security.cert.CertificateException {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
						throws java.security.cert.CertificateException {
					// TODO Auto-generated method stub
					
				}

				@Override
				public java.security.cert.X509Certificate[] getAcceptedIssuers() {
					// TODO Auto-generated method stub
					return null;
				}  
	        };  
	        ctx.init(null, new TrustManager[] { tm }, null);  
	        SSLConnectionSocketFactory ssf = new SSLConnectionSocketFactory(ctx,NoopHostnameVerifier.INSTANCE);  
	        CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(ssf).build();  
	        return httpclient;  
	    } catch (Exception ex) {  
	        ex.printStackTrace();  
	        return HttpClients.createDefault();  
	    }  
	}  
"unable to find valid certification path to requested target"是一个常见的错误信息,通常在使用Maven构建项目时出现。这个错误是由于Maven无法验证目标服务器的证书而导致的。一种可能的原因是您的网络环境中存在代理服务器,或者目标服务器的证书不受信任。 解决这个问题的一种方法是在Maven命令中添加参数"-Djavax.net.ssl.trustStore",并指定一个包含可信任证书的密钥库文件。您可以使用"-Djavax.net.ssl.trustStorePassword"参数指定密钥库的密码。另一种方法是将证书添加到Java的默认密钥库中。 另外,"parent.relativePath"是指向父POM文件的相对路径。当Maven构建项目时,它会尝试查找父POM文件以解析依赖关系。如果找不到父POM文件,就会出现此错误。您可以在子模块的POM文件中使用"relativePath"元素来指定父POM文件的相对路径,或者使用绝对路径来解决问题。 总之,要解决"unable to find valid certification path to requested target"和"parent.relativePath"错误,您可以尝试以下步骤: 1. 确保您的网络连接正常,并且没有使用代理服务器。 2. 尝试通过添加"-Djavax.net.ssl.trustStore"参数来指定密钥库文件的位置,并使用"-Djavax.net.ssl.trustStorePassword"参数指定密码。 3. 如果您的项目使用了父POM文件,请确保在子模块的POM文件中正确指定了父POM文件的路径。 4. 如果问题仍然存在,您可以考虑将目标服务器的证书添加到Java的默认密钥库中。 请根据您的具体情况选择适当的解决方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [初始化springboot 报错 unable to find valid certification path to requested target 不是证书的问题 是...](https://blog.csdn.net/androidV/article/details/105096125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SunCertPathBuilderException: unable to find valid certification path](https://blog.csdn.net/chy555chy/article/details/102480514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值