• Tag Archives: https

JAVA的各种HTTP/HTTPS模拟请求使用经验汇总

https:

try{
			

			
		StringBuffer reultBuffer = new StringBuffer();
			
		KeyStore keyStore  = KeyStore.getInstance("PKCS12");
		FileInputStream instream = new FileInputStream(new File("/home/certificate/apiclient_cert.p12"));
	        String passwordssss=mch_id;
	        keyStore.load(instream, passwordssss.toCharArray());	//证书密码
	        instream.close();
	        SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, passwordssss.toCharArray()).build();	//证书密码(初始是商户ID)
	        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,new String[] { "TLSv1" },null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
	        
		HttpPost httpPost = new HttpPost("https://fraud.mch.weixin.qq.com/risk/getpublickey");
	        CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
	        httpPost.setHeader("Content-Type", "text/xml; charset=UTF-8");
	        httpPost.setEntity(new StringEntity(str_lingqian.toString(),"UTF-8"));
	        
	        CloseableHttpResponse response      = null;
	        InputStream inputStream		        = null;
	        InputStreamReader inputStreamReader = null;
	        BufferedReader bufferedReader       = null;
	        try {
	        	response = httpclient.execute(httpPost);
	        	HttpEntity entity = response.getEntity();
				if (entity!=null){
					inputStream = entity.getContent();
					inputStreamReader = new InputStreamReader(inputStream,"UTF-8");
					bufferedReader = new BufferedReader(inputStreamReader);
					String str = null;
					while ((str = bufferedReader.readLine()) != null) {
						reultBuffer.append(str);
						System.out.println(str);
					}
				}
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}finally{

				httpclient.close();
				response.close();
				bufferedReader.close();
				inputStreamReader.close();
				inputStream.close();
				inputStream = null;
			}
	     
	        Document document = DocumentHelper.parseText(reultBuffer.toString());
	        Element rootElm = document.getRootElement();
	        if(rootElm.elementText("return_code").toString().equals("SUCCESS") && rootElm.elementText("result_code").toString().equals("SUCCESS") ){
	        	pub_key = rootElm.elementText("pub_key").toString();
	        	System.out.println("pub_key = "+pub_key);
	        }else{	        	
	        	return status;
	        }
			
}catch(Exception e){
	e.printStackTrace();
}

 

nginx安装ssl证书后, 安卓机下https提示SSL警告, 且微信端打开空白

西部数码推出了免费的ssl证书, 办法机构是 trustAsia.

根据流程申请后, 并且使用nginx配置我的证书后, 看上去一切正常.

但是此时同事发来贺电说打开空白…

总结情况就是: 苹果机访问一切正常, 但是安卓机的微信端访问空白, 安卓机的自带浏览器提示SSL警告.

123

这是 联想乐檬X3 LITE 自带浏览器访问的结果.

 

于是我怀疑是不是证书域名打错了? 检查了后不是.

于是在想会不会微信对这个机构颁发的证书不信任? 但是查询了一下腾讯自己也有申请这一个证书的功能, 腾讯不会不支持自家的东西.

但是我以前弄过另外一个项目是正常的, 为什么这次不正常?

于是对比了一下nginx的证书配置, 以前的项目我是使用了pem+key证书的搭配, 这个出问题的项目使用的是cer+key的搭配. 于是我通过网站在线合成pem的网页把cer和key合成为pem证书后使用(也就是pem+key的模式), 结果一切正常..! 问题到此已经解决…

为什么会这样呢? 由于没有时间去深入研究, 所以这个问题留给大家去研究啦..!

 

close