使用个人p12证书请求https接口数据

依赖

java 复制代码
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.3</version>
		</dependency>

code

java 复制代码
package com.hexin.cbas.test;

import org.apache.commons.net.util.TrustManagerUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyStore;

public class Https2Test {


    private final static String PFX_PATH = "D:\\person_client.p12";
    private final static String PFX_PWD = "pwd"; //客户端证书密码及密钥库密码

    public static String sslRequestGet(String url) throws Exception {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        try (InputStream stream = Files.newInputStream(Paths.get(PFX_PATH))){
            // 这里就指的是KeyStore库的密码
            keyStore.load(stream, PFX_PWD.toCharArray());
        }
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keyStore, PFX_PWD.toCharArray());
        SSLContext sslContext = SSLContext.getInstance("TLS");
        TrustManager[] trustManagers = new TrustManager[] {TrustManagerUtils.getAcceptAllTrustManager()};
        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagers, null);
        HttpGet httpget = new HttpGet(url);
        try (CloseableHttpClient httpclient = HttpClients.custom().setSSLContext(sslContext)
                .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();
             CloseableHttpResponse response = httpclient.execute(httpget)){
            // 返回结果
            return EntityUtils.toString(response.getEntity(), "UTF-8");
        }
    }
    public static void main(String[] args) throws Exception {
        //url使用的是域名是需要设置,否则会报handshake alert:  unrecognized_name错误
        System.setProperty("jsse.enableSNIExtension", "false");
        System.out.println(sslRequestGet("https://xxxxx.com/user/get"));
    }
}
相关推荐
沐浴露z20 分钟前
【深入理解计算机网络11】应用层详解:DNS,WWW,HTTP
服务器·网络协议·计算机网络·http
想不明白的过度思考者27 分钟前
JavaEE初阶——TCP/IP协议栈:从原理到实战
java·网络·网络协议·tcp/ip·java-ee
川石课堂软件测试7 小时前
MySQL数据库之DBA命令
数据库·网络协议·mysql·http·单元测试·prometheus·dba
2501_9151063211 小时前
Comodo HTTPS 在工程中的部署与排查实战(证书链、兼容性与真机抓包策略)
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9159090611 小时前
苹果软件混淆与 iOS 代码加固趋势,IPA 加密、应用防反编译与无源码保护的工程化演进
android·ios·小程序·https·uni-app·iphone·webview
2501_9160074711 小时前
苹果软件混淆与 iOS 应用加固实录,从被逆向到 IPA 文件防反编译与无源码混淆解决方案
android·ios·小程序·https·uni-app·iphone·webview
贝塔实验室16 小时前
频偏估计方法--快速傅里叶变换(FFT)估计法
网络协议·算法·数学建模·动态规划·信息与通信·信号处理·傅立叶分析
间彧16 小时前
TCPDump诊断网络故障案例-微服务集群间歇性通信失败排查
网络协议
间彧16 小时前
Tcpdump详解与项目实战:从基础到高级的网络抓包技术
网络协议
jz_ddk18 小时前
[LVGL] 从0开始,学LVGL:基础构建篇 - 掌握UI的核心构建块
linux·网络协议·ui·rpc·嵌入式·gui·lvgl