java http 双向认证_Java调用双向认证的https服务

博客介绍了Java HTTP双向认证相关操作,包括使用keytool工具制作服务器端和客户端证书,导出证书,让客户端和服务器端证书相互信任,还展示了查看证书的方法。此外,给出了Java代码示例,实现客户端对HTTPS资源的访问。

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

服务器端证书:

keytool -genkey -v -alias server -keyalg RSA -keystore c:\tomcat.jks -dname "CN=server,OU=nice,O=nice,L=BJ,ST=BJ,C=CN" -storepass 12345678 -keypass 12345678  -validity 3650

导出服务器端证书(CER):

keytool -export -alias server -keystore c:\tomcat.jks  -storepass 12345678 -rfc -file c:\server.cer

制作客户端证书:

keytool -genkey -v -alias client -keyalg RSA -keystore c:\client.jks -dname "CN=client,OU=nice,O=nice,L=BJ,ST=BJ,C=CN" -storepass 12345678 -keypass 12345678  -validity 3650

导出服务器端证书(CER):

keytool -export -alias client -keystore c:\client.jks  -storepass 12345678 -rfc -file c:\client.cer

将客户端证书信任服务器端证书(CER):

keytool -import -noprompt -trustcacerts -alias server -file c:\server.cer -keystore  c:\client.jks -storepass 12345678

将服务器端证书信任客户端证书(CER):

keytool -import -noprompt -trustcacerts -alias client -file c:\client.cer  -keystore  c:\tomcat.jks -storepass 12345678

查看服务器端证书:

keytool -list -keystore c:\tomcat.jks -storepass 12345678 -v

查看客户端证书:

keytool -list -keystore c:\client.jks -storepass 12345678 -v

package com.what21.demo05;

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.SSLSession;

/**

*/

public class TrustAnyVerifier implements HostnameVerifier {

public boolean verify(String hostname, SSLSession session) {

System.out.println(">>> " + hostname + " " + session);

return true;

}

}

package com.what21.demo05;

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

import javax.net.ssl.HttpsURLConnection;

public class AccessHttpsResource {

/**

* @param args

*/

public static void main(String[] args) throws Exception {

// 设置客户端信任证书

System.setProperty("javax.net.ssl.trustStore", "c:/client.jks");

System.setProperty("javax.net.ssl.trustStorePassword","12345678");

// 主机名称验证策略

HttpsURLConnection

.setDefaultHostnameVerifier(new TrustAnyVerifier());

String address = "https://127.0.0.1:8443/";

URL url = new URL(address);

URLConnection conn = url.openConnection();

InputStream input = conn.getInputStream();

int result = input.read();

System.out.println(result);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值