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

news/2024/8/26 12:53:23 标签: https, 网络协议, 证书

依赖

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.3</version>
		</dependency>

code

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"));
    }
}



http://www.niftyadmin.cn/n/5558076.html

相关文章

AI 和平台工程对云原生演进的影响:将云之旅自动化到光速

2024 年和云原生 AI 技术的曙光标志着计算能力的重大飞跃。我们正在经历一个新时代&#xff0c;人工智能 &#xff08;AI&#xff09; 和平台工程融合在一起&#xff0c;改变云计算格局。人工智能现在正在与云计算融合&#xff0c;我们正在经历一个人工智能超越传统界限的时代&…

PIC单片机ICSP接口电路原理图

ICSP接口电路只有五根线&#xff0c;依次为&#xff1a; VPP、VDD、VSS、PGD、PGC&#xff0c;它们与PIC单片机的连接如下图&#xff1a; 题外话单片机中的佼佼者是谁&#xff0c;想知道点击上方图片查看视频 为保证ICSP安全正常工作&#xff0c;烧写时序线PGD和PGC、烧写电压…

“SelectDB 实时数据仓库解决方案”入围工信部“信息技术应用创新典型解决方案”

7 月 11 日&#xff0c;由工业和信息化部网络安全产业发展中心&#xff08;工业和信息化部信息中心&#xff09;主办的 2024 信息技术应用创新发展大会暨解决方案应用推广大会在天津落下帷幕&#xff0c;会上集中发布了一系列技术水平先进、应用效果突出、产业带动性强的信息技…

ARM架构(一)—— ARMV8V9基础概念

目录 1.ARMCore的时间线2.ARM术语小结2.1 A64和arrch642.2ARM架构现在的5个系列2.3 微架构2.4 PE2.5 Banked2.6 ARM文档术语2.7 IMPLEMENTATION DEFINFD 和 DEPRECATED2.8 EL1t和EL1h 3 ARMv7的软件架构4 安全状态切换模型4.1 Secure state和Non-secure state介绍 5 Interproce…

Three.js常见的贴图类型及其用途

在Three.js中&#xff0c;贴图&#xff08;textures&#xff09;用于模拟材料表面的细节&#xff0c;增强3D模型的真实感。不同类型的贴图服务于不同的目的&#xff0c;下面是一些常见的贴图类型及其用途&#xff1a; 1. 基础贴图&#xff08;Diffuse Map 或 Base Color Map&a…

云计算数据中心(二)

目录 三、绿色节能技术&#xff08;一&#xff09;配电系统节能技术&#xff08;二&#xff09;空调系统节能技术&#xff08;三&#xff09;集装箱数据中心节能技术&#xff08;四&#xff09;数据中心节能策略和算法研究&#xff08;五&#xff09;新能源的应用&#xff08;六…

hive动态分区导致xceivercount超限,hdfs无法创建新连接

目录 一、事件复盘&#xff1a; 二、解决方案&#xff1a; 三、讨论 一、事件复盘&#xff1a; hdfs无法创建新的文件&#xff0c;xceivercount超过最大设置&#xff0c;平时每个datanode只有100个左右的连接&#xff0c;突然达到8000以上。 事故原因&#xff0c;跨多天的…

基于STM32设计的物联网智能鱼缸(微信小程序)(187)

基于STM32设计的物联网智能鱼缸(微信小程序)(187) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计需求总结【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的…