双向SSL认证证书 生成 jks 步骤, java用jks 发送http请求 方法

该文详细阐述了如何生成jks文件以实现双向SSL认证,包括合并PEM和Key,创建PKCS12的keystore,转换为jks格式,获取并导入服务器证书到信任存储。接着提供了一个使用ApacheHttpClient的Java代码示例,展示如何在HTTP请求中应用这些证书。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


)

准备材料

1.证书的 cert.pem 文件
2.key文件
3.key的密钥

证书处理步骤

这里只显示 liunx 命令 ,windows 的同学可自查

合并客户端证书 pem 和 key 到一个 pem 中

cat xxx.cert.pem xxx.key > xxx.fullchain.pem

生成PKCS12 的 keystore

openssl pkcs12 -export -in xxx.fullchain.pem -out xxx.fullchain.p12 -name xxx-cert -noiter -nomaciter

这个命令会提示输入3次密码 ,第一次输入xxx.key的密码 ,
第二次提示输入导出密码 自己设就行 ,这里用 changeit
注意: 第一次 不是自己设的 需要用 key文件的密钥

转换 .p12 文件为 .jks 格式

这里会用 上一步骤的导出密码 这里用 changeit

keytool -importkeystore -srckeystore xxx.fullchain.p12 -srcstoretype pkcs12 -srcalias xxx-cert -srcstorepass changeit -destkeystore xxx.jks -deststoretype jks -deststorepass changeit -destalias xxx-cert -destkeypass changeit

获取服务器证书

echo -n | openssl s_client -connect  baidu.com:443 -servername  baidu.com -key xxx.key -cert xxx.cert.pem | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | tee "server.crt"

导入服务器证书 server 到客户端的 truststore 里

为了简便,这里客户端的truststore也用之前的xxx.jks,所有密码都用changeit,当然也可以用一个专属的keystore文件。
但 要注意 ,如果这个服务器没有导入过证书 ,用别的服务器生成的jks 可能会导致证书无效 , 需要在新服务器重新生成

keytool -import -alias servercert -file server.crt -keypass changeit -keystore xxx.jks -storepass changeit

上述 步骤 结束后 会得到 xxx.jks 文件 方便java 请求

下面送上 java 用证书调用http请求代码

pom 依赖

pom依赖

<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
</dependency>
</dependencies>

测试接口调用的代码

代码送了 工具类就不送了 自己生成一个就行 ,实在不行的留言

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;

public class TestApple {

public static void main(String args[]) throws UnrecoverableKeyException, CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException {


String url = "https://baidu.com";
String jskPath = "E:\\test\\apple\\xxx.jks";

SSLContext sslContext = SSLContextBuilder.create()
.loadKeyMaterial(new File(jskPath),"changeit".toCharArray(),"changeit".toCharArray())
.loadTrustMaterial(new File(jskPath),"changeit".toCharArray()).build();
HttpClient client = HttpClients.custom().setSslcontext(sslContext).build();

String result = null;
HttpGet httpGet = new HttpGet(url);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
httpGet.setConfig(requestConfig);
try {
HttpResponse response = null;
try {
response = client.execute(httpGet);
} catch (IOException e) {
e.printStackTrace();
}
HttpEntity entity = response.getEntity();
try {
result = EntityUtils.toString(entity, "UTF-8");
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
// logger.error(e);
}
} finally {
httpGet.abort();
}
}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值