使用个人p12证书请求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"));
    }
}


相关推荐

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

    2024-07-14 05:40:03       25 阅读
  2. springboot中使用RestTemplate 请求http接口

    2024-07-14 05:40:03       29 阅读
  3. https方式请求 且过滤证书

    2024-07-14 05:40:03       57 阅读
  4. 鸿蒙harmony--HTTP数据请求的简单使用

    2024-07-14 05:40:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 05:40:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 05:40:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 05:40:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 05:40:03       69 阅读

热门阅读

  1. 华为SRG2200 端口映射 & 双向NAT & 回流

    2024-07-14 05:40:03       27 阅读
  2. 宕机/脱机

    2024-07-14 05:40:03       26 阅读
  3. 【LC刷题】DAY24:122 55 45 1005

    2024-07-14 05:40:03       30 阅读
  4. Qt/QML学习-BusyIndicator

    2024-07-14 05:40:03       22 阅读
  5. 算法热门面试题二

    2024-07-14 05:40:03       29 阅读
  6. pyinstaller系列教程(一)-基础介绍

    2024-07-14 05:40:03       20 阅读
  7. 大语言模型系列-Transformer

    2024-07-14 05:40:03       25 阅读