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这套代码。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Springmvc 4.x利用@ResponseBody返回Json数据的方法
这篇文章主要介绍了Springmvc 4.x利用@ResponseBody返回Json数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-04-04
JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)
本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有一定的参考价值,需要的朋友可以参考下2025-03-03
java之scan.next()与scan.nextline()函数的使用及区别
这篇文章主要介绍了java之scan.next()与scan.nextline()函数的使用及区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-04-04


最新评论