/**
* 获取Https的证书
* @param context Activity(fragment)的上下文
* @return SSL的上下文对象
*/
private static SSLContext getSSLContext(Context context) {
SSLContext s_sSLContext = null;
if (null != s_sSLContext) {
return s_sSLContext;
}
CertificateFactory certificateFactory = null;
InputStream inputStream = null;
KeyStore keystore = null;
String tmfAlgorithm = null;
TrustManagerFactory trustManagerFactory = null;
try {
certificateFactory = CertificateFactory.getInstance("X.509");
inputStream = context.getAssets().open("1781148__api.loan.agri-fintech.cn.pem");//这里导入SSL证书文件
// inputStream = context.getAssets().open("51p2b_server_bs.pem");//这里导入SSL证书文件
Certificate ca = certificateFactory.generateCertificate(inputStream);
keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(null, null);
keystore.setCertificateEntry("ca", ca);
tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
trustManagerFactory = TrustManagerFactory.getInstance(tmfAlgorithm);
trustManagerFactory.init(keystore);
// Create an SSLContext that uses our TrustManager
s_sSLContext = SSLContext.getInstance("TLS");
s_sSLContext.init(null, trustManagerFactory.getTrustManagers(), null);
return s_sSLContext;
} catch (CertificateException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public String httpGet(String httpUrl) {
BufferedReader input = null;
StringBuilder sb = null;
URL url = null;
HttpURLConnection con = null;
try {
url = new URL(httpUrl);
try {
SSLContext sslContext = getSSLContext(LoginActivity.this);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession sslsession) {
if ("host".equals(hostname)) {//判断域名是否和证书域名相等
Log.i("tttt", "相等");
return true;
} else {
Log.i("tttt", "不相等");
return false;
}
}
});
if (url.getProtocol().toLowerCase().equals("https")) {//判断是http还是https
//https.setHostnameVerifier(DO_NOT_VERIFY);
con = https;
} else {
con = (HttpURLConnection) url.openConnection();
}
input = new BufferedReader(new InputStreamReader(con.getInputStream()));
sb = new StringBuilder();
String s;
while ((s = input.readLine()) != null) {
sb.append(s).append("\n");
Log.i("sss", sb+"");
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} finally {
// close buffered
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// disconnecting releases the resources held by a connection so they may be closed or reused
if (con != null) {
con.disconnect();
}
}
return sb == null ? null : sb.toString();
}