Java如何使用SSLContext请求https链接
更新时间:2024年01月23日 10:14:13 作者:大魔王King
这篇文章主要介绍了Java如何使用SSLContext请求https链接问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
使用SSLContext请求https链接
先了解几个关键类
SSLContext安全套接字协议的实现核心类SSLSocket扩展自Socket用户客户端SSLSocketFactory工厂类SSLServerSocket扩展自ServerSocket用于服务端SSLServerSocketFactorySSLServerSocket的工厂KeyStore密钥证书KeyManager密钥管理器TrustManager信任管理器X590TrustedManagerTrustManager的子接口,管理X509证书,验证远程链接
核心代码
如下:
//首先自己实现信任管理器类,创建一个X509TrustManager对象
X509TrustManager x509m = new X509TrustManager() {
//返回受信任的X509证书数组
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
//检查服务器的证书,若不信任该证书抛出异常,可以不检查默认都信任
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
//检查客户端证书,若不信任该证书抛出异常,咱们自己就是客户端不用检查
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
};
// 获取一个SSLContext实例,核心对象
SSLContext s = SSLContext.getInstance("SSL");
// 初始化SSLContext.init(可以导入的证书,信任管理器,SecureRandom) 三个参数都可为null,没有证书填写null就行
s.init(null, new TrustManager[] { x509m }, new java.security.SecureRandom());
//获取SSLSocket 用于通信
SSLSocketFactory factory = s.getSocketFactory();
SSLSocket s = (SSLSocket) factory.createSocket("localhost", port);
//获取输入输出流
OutputStream output = s.getOutputStream();
InputStream input = s.getInputStream();
//发送数据
DataOutputStream out = new DataOutputStream(output);
out.writeBytes("测试发送数据");
out.flush();
out.close();
//接收数据
Reader reader = new InputStreamReader(input, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(reader);
String str = null;
StringBuffer sb = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
sb.append(str);
}
reader.close();
System.out.println(sb.toString()); //打印返回的数据
这就是Java最原始的使用SSLContext创建SSLSocket发送https请求。
如果使用框架如okhttp httpclient 底层已经实现https请求,CA机构颁发的证书或者权威机构颁发的证书都是直接信任的 直接使用即可不需要再重写任何代码,网上的好多文章说的都有点问题,我已经亲测可用,对于自己生成的证书的https服务才需要另外配置SSLContext这套代码。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
JavaSpring boot配置JDK和MAVEN开发环境详解
本文介绍了在Windows系统上配置JDK、Maven、IntelliJ IDEA的详细步骤,首先安装JDK并配置环境变量,然后下载并解压Maven,配置环境变量和Maven仓库,最后安装并配置IntelliJ IDEA,设置项目SDK和Maven配置2026-04-04
MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式
这篇文章主要介绍了MyBatis typeAliases元素标签(含注解方式)及其属性、设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
SpringBoot整合Kafka实现高可用消息队列集群详解
Apache Kafka是一个分布式流处理平台,这篇文章主要介绍了SpringBoot如何整合Kafka实现高可用消息队列集群,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下2026-01-01
elasticsearch构造Client实现java客户端调用接口示例分析
这篇文章主要为大家介绍了elasticsearch构造Client实现java客户端调用接口示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-04-04


最新评论