说明
上篇详细描述了自定义ca证书的步骤以及浏览器作为客户端和java作为客户端的使用方法。
但是之前的java客户端使用代码还存在一定的问题:
首先,之前的客户端根证书是在代码外部使用keytool安装到jdk证书库,次数多了就显得麻烦;
其次,之前的代码只能支持域名访问,这样没有真实域名时就必须更改host文件;
于是通过查找网络资料修改之后,便有了新的操作方式,使得java客户端可以支持ip访问https,同时不用直接侵入jdk。
支持ip访问https的java客户端
http请求有多种框架,java常用的可能就是httpclient,而目前公司安卓那边使用的是okhttp,因此除了尝试我所熟悉的httpclient之外,也做了okhttp在java环境下的尝试。
httpclient方式代码
以下代码基本来自网络,由于搜索资料过多,已经无法找到原出处。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
/*** @Description:TODO类描述* @since JDK 1.8* @author tuzongxun* @Email 1160569243@qq.com* @version: v1.0.0* @date: 2019年4月9日 下午2:43:35*/
public class CaTest {// private String serverUrl = "https://blog.tzx.cn";private String serverUrl = "https://192.168.0.205";private SSLSocketFactory sslFactory = null;/*** @author: tuzongxun* @date: 2019年4月9日 下午2:42:03
*/public void run() {try {HttpURLConnection connection = doHttpRequest(serverUrl, "GET", "", null);int responseCode = getResponseCode(connection);