package com.supersavedriving.user.modular.system.util.bank.parmUtil;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import javax.net.ssl.*;
|
import java.io.BufferedReader;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.net.MalformedURLException;
|
import java.net.URL;
|
import java.security.GeneralSecurityException;
|
import java.security.KeyStore;
|
import java.security.KeyStoreException;
|
import java.security.NoSuchAlgorithmException;
|
import java.security.cert.CertificateException;
|
import java.security.cert.X509Certificate;
|
|
public class HttpsPost {
|
/**
|
* 获得KeyStore.
|
* @param keyStorePath
|
* 密钥库路径
|
* @param password
|
* 密码
|
* @return 密钥库
|
* @throws KeyStoreException
|
* @throws CertificateException
|
* @throws NoSuchAlgorithmException
|
* @throws Exception
|
*/
|
public static KeyStore getKeyStore(String password, String keyStorePath) throws Exception{
|
KeyStore ks = null;
|
// 实例化密钥库
|
ks = KeyStore.getInstance("JKS");
|
// 获得密钥库文件流
|
FileInputStream is = new FileInputStream(keyStorePath);
|
// 加载密钥库
|
ks.load(is, password.toCharArray());
|
// 关闭密钥库文件流
|
is.close();
|
return ks;
|
}
|
|
/**
|
* 获得SSLSocketFactory.
|
* @param password
|
* 密码
|
* @param keyStorePath
|
* 密钥库路径
|
* @param trustStorePath
|
* 信任库路径
|
* @return SSLSocketFactory
|
* @throws Exception
|
*/
|
public static SSLContext getSSLContext(String password,
|
String keyStorePath, String trustStorePath) throws Exception {
|
// 实例化密钥库
|
KeyManagerFactory keyManagerFactory = KeyManagerFactory
|
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
|
// 获得密钥库
|
KeyStore keyStore = getKeyStore(password, keyStorePath);
|
// 初始化密钥工厂
|
keyManagerFactory.init(keyStore, password.toCharArray());
|
|
// 实例化信任库
|
TrustManagerFactory trustManagerFactory = TrustManagerFactory
|
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
// 获得信任库
|
KeyStore trustStore = getKeyStore(password, trustStorePath);
|
// 初始化信任库
|
trustManagerFactory.init(trustStore);
|
// 实例化SSL上下文
|
SSLContext ctx = SSLContext.getInstance("TLS");
|
// 初始化SSL上下文
|
ctx.init(keyManagerFactory.getKeyManagers(),
|
trustManagerFactory.getTrustManagers(), null);
|
// 获得SSLSocketFactory
|
return ctx;
|
}
|
|
/**
|
* 初始化HttpsURLConnection.
|
* @param password
|
* 密码
|
* @param keyStorePath
|
* 密钥库路径
|
* @param trustStorePath
|
* 信任库路径
|
* @throws Exception
|
*/
|
public static void initHttpsURLConnection(String password,
|
String keyStorePath, String trustStorePath) throws Exception {
|
// 声明SSL上下文
|
SSLContext sslContext = null;
|
// 实例化主机名验证接口
|
HostnameVerifier hnv = new MyHostnameVerifier();
|
try {
|
sslContext = getSSLContext(password, keyStorePath, trustStorePath);
|
} catch (GeneralSecurityException e) {
|
e.printStackTrace();
|
}
|
if (sslContext != null) {
|
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
|
.getSocketFactory());
|
}
|
HttpsURLConnection.setDefaultHostnameVerifier(hnv);
|
}
|
|
private static void trustAllHttpsCertificates() throws Exception {
|
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
|
javax.net.ssl.TrustManager tm = new miTM();
|
trustAllCerts[0] = tm;
|
SSLContext sc = SSLContext
|
.getInstance("SSL");
|
sc.init(null, trustAllCerts, null);
|
HttpsURLConnection.setDefaultSSLSocketFactory(sc
|
.getSocketFactory());
|
}
|
|
static class miTM implements javax.net.ssl.TrustManager,
|
javax.net.ssl.X509TrustManager {
|
public X509Certificate[] getAcceptedIssuers() {
|
return null;
|
}
|
|
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
|
throws CertificateException {
|
// TODO Auto-generated method stub
|
|
}
|
|
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
|
throws CertificateException {
|
// TODO Auto-generated method stub
|
|
}
|
}
|
|
/**
|
* 发送请求.
|
* @param httpsUrl
|
* 请求的地址
|
* @param xmlStr
|
* 请求的数据
|
* @param merchantNo
|
* 商户编号
|
* @param tranCode
|
* 交易码
|
*/
|
public static String post(String httpsUrl, String xmlStr, String merchantNo, String tranCode, String ssn) {
|
if (StringUtils.isBlank(httpsUrl)) {
|
System.out.println("请求url为空 !");
|
return null;
|
}
|
|
if (StringUtils.isBlank(xmlStr)) {
|
System.out.println("发送内容为空 !");
|
return null;
|
}
|
HttpsURLConnection urlCon = null;
|
try {
|
trustAllHttpsCertificates();
|
urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection();
|
System.out.println("executing request: " + urlCon.getURL());
|
//HttpsURLConnection.setDefaultHostnameVerifier(hv);
|
urlCon.setDoInput(true);
|
urlCon.setDoOutput(true);
|
urlCon.setRequestMethod("POST");
|
urlCon.setRequestProperty("merchantNo",merchantNo);
|
urlCon.setRequestProperty("tranCode",tranCode);
|
urlCon.setRequestProperty("serialNo",ssn);
|
urlCon.setRequestProperty("tranTmpt",Utils.getNowTime26());
|
urlCon.setRequestProperty("version","v1.0");
|
urlCon.setRequestProperty("Content-Length",
|
String.valueOf(xmlStr.getBytes().length));
|
urlCon.setUseCaches(false);
|
//设置为gbk可以解决服务器接收时读取的数据中文乱码问题
|
// urlCon.getOutputStream().write(xmlStr.getBytes("GBK"));
|
urlCon.getOutputStream().write(xmlStr.getBytes("UTF-8"));
|
System.out.println("HTTPS,POST过去的数据是: \n" + xmlStr);
|
|
urlCon.getOutputStream().flush();
|
urlCon.getOutputStream().close();
|
BufferedReader in = new BufferedReader(new InputStreamReader(
|
urlCon.getInputStream()));
|
StringBuffer strBuff = new StringBuffer();
|
String line;
|
while ((line = in.readLine()) != null) {
|
strBuff.append(line);
|
}
|
System.out.println("HTTPS,服务器响应结果是: \n" + strBuff.toString());
|
return strBuff.toString();
|
} catch (MalformedURLException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
}
|