一、项目背景
Java项目需要作为客户端发起HTTPS请求访问服务端,并且需要携带证书进行SSL双向认证,当前提供的证书相关文件有:ca.crt、ca.key、client.crt、client.key、server.crt、server.key
二、实现步骤
1、对客户端证书和私钥进行打包处理(需要输入密码,之后在代码中需要用到该密码)
openssl pkcs12 -export clcerts -in client.crt -inkey client.key -out client.p12
2、.p12文件转化成JKS格式
keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -destkeystore client.jks -deststoretype JKS
3、CA根证书转成JKS格式(需要输入密码,之后在代码中需要用到该密码)
keytool -import -noprompt -file ca.crt -keystore ca.jks -storepass 123456
4、Java代码实现HTTPS请求(POST)
package com.fuck.study.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.net.ssl.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class HttpsUtil {
//CA根证书文件路径
private String caPath="D:/https/ca.jks";
//CA根证书生成密码
private String caPassword="123456";
//客户端证书文件名
private String clientCertPath="D:/https/client.jks";
//客户端证书生成密码
private String clientCertPassword="123456";
private SSLSocketFactory sslFactory;
//https POST请求返回结果和结果码
public Map<String,Object> httpsPost(String requestUrl, String xml) throws Exception {
Map<String,Object> map=new HashMap<>();
OutputStreamWriter wr=null;
HttpURLConnection conn=null;
try {
URL url = new URL(requestUrl);
//start 这一段代码必须加在open之前,即支持ip访问的关键代码
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public<

最低0.47元/天 解锁文章
1517





