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链接相关推荐

  1. JAVA使用HttpURLConnection请求HTTPS网站,不需要证书验证的DEMO教程

    最近在获取一个购物网站商品,发现浏览器和postman每次都可以请求到内容,但是java代码尝试了各种方式都是Connection refused: connect,一开始以为是java代码的问题,后 ...

  2. java实现从http/https链接地址下载文件

    需求: 现在需要从http地址下载文件改到从https地址下载 改造: 代码示例: TestDownLoadFile.java import org.junit.Test; import org.sl ...

  3. 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 ...

  4. java访问https链接下载图片

    java访问https链接下载图片 一.通过maven引入https工具包 <dependency><groupId>org.apache.httpcomponents< ...

  5. java发送get请求,并带上参数,HTTP和HTTPS都可以

    //java发送get请求,并带上参数public static String send_Get(String encode_data){CloseableHttpClient httpClient ...

  6. org.apache.http.impl.client 如何请求 HTTPS 的接口?

    背景 接口类型: HTTPS 工具类: org.apache.http.impl.client 发现网络上找到的许多信息并不真确,无法真正地完成 HTTPS 接口的请求,经过测试,写出如下示例代码. ...

  7. curl命令java_上curl java 模拟http请求

    最近,我的项目要求java模拟http请求,获得dns解决 tcp处理过的信息特定的连接. java api提供urlConnection apache提供的httpClient都不能胜任该需求,二次 ...

  8. Android添加Header请求参数实例,java响应header请求实现demo

    1.首先添加AsyncHttpClient.jar包到libs文件夹下 2.初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHtt ...

  9. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

最新文章

  1. 2022-2028年中国普鲁兰多糖行业市场分析及投资前景研究报告
  2. iOS 四种保存数据的方式!
  3. 聊一聊:你都用什么方式回忆青春呢?
  4. 读文件计算方法执行时间的实例
  5. java day10(续day9)
  6. python学习-字符串格式化
  7. 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
  8. 云安全的新战场上,要靠什么来抵御威胁
  9. 2015-01-13
  10. 动手学深度学习Pytorch Task06
  11. 免登录实现CSDN博客代码复制(2021.9.26)
  12. Android实战之淘宝领券(三)
  13. 调试神器SEGGER_RTT移植使用
  14. 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)...
  15. 1.MySQL增删改查(初阶)
  16. ORAN C平面传输和基本功能
  17. 移动终端软件高级开发技术------- 记账本
  18. unity EZ Replay Manager 1.53
  19. 晨枫U盘维护V2.0_512M被淹死的鱼修正版
  20. 校园二手物品商城交易平台

热门文章

  1. 开发中,模拟器网络请求成功,真机网络请求失败
  2. AI 界著名「嘴炮」发声:鬼扯,LaMDA 不可能觉醒!
  3. 8.2018年全网最全面的社群赚钱操作指南
  4. 强化学习入门第一讲 马尔科夫决策过程
  5. 文献阅读Leveraging Word-Formation Knowledge for Chinese Word Sense Disambiguation
  6. spring框架巨巨巨巨详细
  7. Lucene搜索流程(2.IndexReader)
  8. 【PTA Advanced】1148 Werewolf - Simple Version(C++)
  9. python selenium 实现快手自动评论
  10. L - Let‘s Swap(哈希 + 规律)