关于PKIX path building failed的问题

来源:互联网 发布:程序员前景 编辑:程序博客网 时间:2024/06/16 17:37

最近在做一个https的接口,对方说不需要证书,但是我这边链接不过去,只能自己写一个假的安全证书绕过去,代码如下:

package com.ywwy.common.service;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;


import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import com.icip.signature.encrypt.Encryption;
import com.ieslab.eim.common.util.FileTypeWrite;
/**
 * http/https链接
 * @author hlf 20171127
 *
 */

public class ConnectWYService {

//日志记录文件
FileTypeWrite ftw=new FileTypeWrite();
private static class TrustAnyTrustManager implements X509TrustManager {  
     
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
      
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
      
        public X509Certificate[] getAcceptedIssuers() {  
            return new X509Certificate[]{};  
        }  
    }  
      
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {  
        public boolean verify(String hostname, SSLSession session) {  
            return true;  
        }  
    }
    
    public String InforMation(String xml, String url,String type){
System.gc(); // 垃圾回收,回收没有正常关闭的http连接
        String result="";
        InputStream response = null;
OutputStream reqStream = null;
try{
URL console = new URL(url);
HttpURLConnection request = (HttpURLConnection) console.openConnection(); 
if (request instanceof HttpsURLConnection)  {//如果是https的请求,自己制造证书验证通过  
            SSLContext sc = SSLContext.getInstance("SSL");  
            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());  
            ((HttpsURLConnection) request).setSSLSocketFactory(sc.getSocketFactory());  
            ((HttpsURLConnection) request).setHostnameVerifier(new TrustAnyHostnameVerifier());  
        }
//设置参数以及超时
request.setRequestMethod("POST");
request.setDoOutput(true);
request.setConnectTimeout(20 * 1000);
request.addRequestProperty("Content-Type", "text/xml");
//拼接参数
StringBuffer sbf=new StringBuffer();

//此处拼写客户方的账户信息,可以替换自己的内容
sbf.append("{\"request\":{\"requestBody\":");
sbf.append(xml);
sbf.append(",\"requestHeader\":{\"productId\":\"ELEB\",\"interfaceVersion\":\"1.0.0\",\"deviceOsVersion\":\"1.6\",\"softTerminalVersion\":\"1.6\",\"softTerminalId\":\"E-TPS\",\"serviceCode\":\""+type+"\"}}}");
ftw.WriteFileInfo(type, "未加密发送给平台的字符串"+sbf.toString());
//使用客户要求的加密处理
Encryption et=new Encryption();
String beforePost=et.encryption(sbf.toString());
byte[] data = beforePost.getBytes("UTF-8");

// 往服务器写入数据
reqStream = request.getOutputStream();
reqStream.write(data, 0, data.length);

// 获取服务端返回
response = request.getInputStream();

StringBuffer sb = new StringBuffer();
byte[] d = new byte[1024];
int chunk = 0;
while ((chunk = response.read(d)) != -1) {
sb.append(new String(d, 0, chunk, "UTF-8"));
}
result = sb.toString();
//客户提供jar解密
result=et.decryption(result);
}catch(Exception ex){

}finally {
// 关闭连接和流
if (reqStream != null) {
try {
reqStream.close();
} catch (IOException e) {
}
}
if (response != null) {
try {
response.close();
} catch (IOException e) {
}
}
}
ftw.WriteFileInfo(type, "接收来自平台的字符串"+result);
return result;
}
}

阅读全文
0 0
原创粉丝点击