Java使用SSLContext请求https链接
Java使用SSLContext请求https链接
先了解几个关键类
SSLContext 安全套接字协议的实现核心类
SSLSocket 扩展自Socket用户客户端
SSLSocketFactory 工厂类
SSLServerSocket 扩展自ServerSocket用于服务端
SSLServerSocketFactory SSLServerSocket的工厂
KeyStore 密钥证书
KeyManager 密钥管理器
TrustManager 信任管理器
X590TrustedManager TrustManager的子接口,管理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这套代码。
Java使用SSLContext请求https链接相关推荐
- JAVA使用HttpURLConnection请求HTTPS网站,不需要证书验证的DEMO教程
最近在获取一个购物网站商品,发现浏览器和postman每次都可以请求到内容,但是java代码尝试了各种方式都是Connection refused: connect,一开始以为是java代码的问题,后 ...
- java实现从http/https链接地址下载文件
需求: 现在需要从http地址下载文件改到从https地址下载 改造: 代码示例: TestDownLoadFile.java import org.junit.Test; import org.sl ...
- java用HttpURLConnection发起HTTPS请求并跳过SSL证书,解决:unable to find valid certification path to requested targ
java用HttpURLConnection发起HTTPS请求并跳过SSL证书 问题出现:unable to find valid certification path to requested ta ...
- java访问https链接下载图片
java访问https链接下载图片 一.通过maven引入https工具包 <dependency><groupId>org.apache.httpcomponents< ...
- java发送get请求,并带上参数,HTTP和HTTPS都可以
//java发送get请求,并带上参数public static String send_Get(String encode_data){CloseableHttpClient httpClient ...
- org.apache.http.impl.client 如何请求 HTTPS 的接口?
背景 接口类型: HTTPS 工具类: org.apache.http.impl.client 发现网络上找到的许多信息并不真确,无法真正地完成 HTTPS 接口的请求,经过测试,写出如下示例代码. ...
- curl命令java_上curl java 模拟http请求
最近,我的项目要求java模拟http请求,获得dns解决 tcp处理过的信息特定的连接. java api提供urlConnection apache提供的httpClient都不能胜任该需求,二次 ...
- Android添加Header请求参数实例,java响应header请求实现demo
1.首先添加AsyncHttpClient.jar包到libs文件夹下 2.初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHtt ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
最新文章
- 2022-2028年中国普鲁兰多糖行业市场分析及投资前景研究报告
- iOS 四种保存数据的方式!
- 聊一聊:你都用什么方式回忆青春呢?
- 读文件计算方法执行时间的实例
- java day10(续day9)
- python学习-字符串格式化
- 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
- 云安全的新战场上,要靠什么来抵御威胁
- 2015-01-13
- 动手学深度学习Pytorch Task06
- 免登录实现CSDN博客代码复制(2021.9.26)
- Android实战之淘宝领券(三)
- 调试神器SEGGER_RTT移植使用
- 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)...
- 1.MySQL增删改查(初阶)
- ORAN C平面传输和基本功能
- 移动终端软件高级开发技术------- 记账本
- unity EZ Replay Manager 1.53
- 晨枫U盘维护V2.0_512M被淹死的鱼修正版
- 校园二手物品商城交易平台
热门文章
- 开发中,模拟器网络请求成功,真机网络请求失败
- AI 界著名「嘴炮」发声:鬼扯,LaMDA 不可能觉醒!
- 8.2018年全网最全面的社群赚钱操作指南
- 强化学习入门第一讲 马尔科夫决策过程
- 文献阅读Leveraging Word-Formation Knowledge for Chinese Word Sense Disambiguation
- spring框架巨巨巨巨详细
- Lucene搜索流程(2.IndexReader)
- 【PTA Advanced】1148 Werewolf - Simple Version(C++)
- python selenium 实现快手自动评论
- L - Let‘s Swap(哈希 + 规律)