脚本宝典收集整理的这篇文章主要介绍了HttpsURLConnection使用,并实现双向认证,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
添加信任所有服务端证书也可在方法中控制
package something; import java.securITy.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; /** * 信任所有证书 * @author hp * */ public class AllTrustManager implements X509TrustManager { @override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } }
使用HttpsURLConnection发送POST请求(默认443端口)
package something; import java.io.BufferedReader; import java.io.File; import java.io.FileinputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PRintWriter; import java.net.URL; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; public class HttpsRequest { //测试url private final static String URL_test="https://www.baidu.COM"; //客户端证书路径 private final static String PATH="c://xxxx"; //证书密码 private final static String psw="123456"; /** * 发送POST请求 * @param agrs * @return * @throws IOException * @throws KeyManagementException * @throws KeyStoreException * @throws NoSuchAlgorithmException * @throws CertificateException * @throws UnrecoverableKeyException */ public String doPost(String agrs) throws IOException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException{ //导入客户端证书 KeyStore ks=KeyStore.getInstance("pkcs12"); FileInputStream instream = new FileInputStream(new File(PATH)); ks.load(instream, psw.toCharArray()); KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, psw.toCharArray()); //添加信任证书 TrustManager[] tm={new AllTrustManager()};//AllTrustManager()为信任所有证书 SSLContext ctx=SSLContext.getInstance("SSL");//创建ssl上下文 //初始化 ;参数1为null,则不上传客户端证书(通常情况都是如此); ctx.init(kmf.getKeyManagers(), tm, new SecureRandom()); //ctx.init(kmf.getKeyManagers(), null, new SecureRandom());//验证系统默认证书 //ctx.init(kmf.getKeyManagers(), TrustManager[] tm, new SecureRandom());//导出服务端证书,然后按照keymanager一样实现trustmanager SSLSocketFactory sf=ctx.getSocketFactory(); URL _url=new URL(URL_TEST); HttpsURLConnection conn=(HttpsURLConnection) _url.oPEnConnection(); conn.setRequestMethod("POST");//设定请求方法 conn.setConnectTimeout(20000); conn.setReadTimeout(20000); conn.setDoInput(true);//打开输入流 conn.setDoOutput(true);//打开输出流写入写出参数必需 conn.setSSLSocketFactory(sf);//添加ssl参数 //输出参数 PrintWriter pw=new PrintWriter(conn.getOutputStream()); pw.write(agrs); pw.flush(); //获取输入流 BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer result=new StringBuffer(); String s=br.readLine(); while(s!=null){ result.append(s); s=br.readLine(); } pw.close(); br.close(); return result.toString(); } }
以上是脚本宝典为你收集整理的HttpsURLConnection使用,并实现双向认证全部内容,希望文章能够帮你解决HttpsURLConnection使用,并实现双向认证所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。