多个定时器相互干扰的问题_相互问题

多个定时器相互干扰的问题

HTTPS协议是建立安全连接的公认标准。 理解此协议的工作原理不是问题,并且自2000年以来可以使用相应的RFC文档 。

尽管HTTPS的使用如此广泛,但您仍然可以找到没有不必要的复杂性就无法处理此协议的软件。 不幸的是,在使用该语言进行相互身份验证的过程中遇到了一些问题,这些都不会让我感到惊讶。 它是Java

HTTPS如何工作?

在描述实现过程中遇到的问题之前,我将描述相互认证的工作原理。 HTTPS协议使用TLS / SSL协议来保护连接。 TLS / SSL协议定义了身份验证握手,该握手允许以安全方式将任何客户端与服务器连接。 在握手过程中,执行以下步骤:

  • 客户端发送消息以启动连接。
  • 服务器将其证书发送给客户端。
  • 客户端使用受信任的权威机构颁发的证书来验证证书。
  • 服务器发送对客户端证书的请求。
  • 客户端将其证书发送到服务器。
  • 服务器验证客户端的证书。
  • 服务器和客户端交换在数据加密期间使用的主密钥。
  • 建立连接。

我们和队友一起尝试用Java实现HTTPS客户端。 结合我们对TLS / SSL握手的知识和来自curl的手动测试的经验,我们假设实现客户端仅需要三个文件: 一个客户端的证书一个客户端的私钥一个用于验证服务器证书的受信任证书

哦,我们这么认为是多么错误。

Java –问题,解决方案以及为什么如此困难

由于每天使用相互身份验证是很不常见的,因此我们要求世界上最好的消息来源提供少量帮助。 初看Google叔叔提供的结果并没有揭示实现背后的复杂性,但是每次点击结果都使我们找到了越来越混乱的解决方案(其中一些是90年代的解决方案)。 更糟糕的是,我们不得不使用Apache HttpComponents来实现我们的连接,但是大多数提议的解决方案都基于纯Java库。

来自互联网的知识使我们能够确定:

  • Java不能直接使用任何证书或私钥(例如curl
  • Java需要单独的文件( Java Keystores ),其中可以包含原始证书和密钥。
  • 我们需要一个受信任的密钥库,其中包含每个HTTPS连接的服务器证书验证所需的证书。
  • 我们需要一个密钥密钥库,其中包含客户端的证书和客户端的私钥以进行相互认证。

首先,我们必须创建受信任的密钥库。 我们使用keytool命令使用证书创建了密钥库:

$ keytool -import -alias trusted_certificate -keystore trusted.jks -file trusted.crt

我们将证书trusted.crt存储在密钥库文件trusted.jks中,别名为trusted_certificate 。 在执行此命令期间,要求我们输入此密钥库的密码。 我们稍后使用此密码来访问密钥库文件。

要创建密钥库,需要执行一些其他步骤。 在大多数情况下,您可能会从公司获得两个文件,这些文件会颁发客户的证书。 第一个文件是pem格式的客户证书。 该证书将被发送到服务器。 第二个文件是客户端的私钥(也是pem格式),在握手过程中使用该私钥来确认您是客户端证书的所有者。

不幸的是, Java仅支持PKCS12格式。 因此,我们必须将证书和私钥转换为PKCS12格式。 我们可以使用OpenSSL做到这一点。

$ openssl pkcs12 -export \-in client.crt \-inkey client.key \-out key.p12 \-name client

我们从文件client.crtclient.key生成了文件key.p12 。 再次需要输入密码。 此密码用于保护私钥。

通过将PKCS12导入新的密钥库,可以从PKCS12格式的文件中生成另一个密钥库:

$ keytool -importkeystore \-destkeystore key.jks \-deststorepass <<keystore_password>> \-destkeypass <<key_password_in_keystore>> \-alias client \-srckeystore key.p12 \-srcstoretype PKCS12 \-srcstorepass <<original_password_of_PKCS12_file>>

这个命令看起来有点复杂,但是解密起来却很容易。 在命令的开头,我们声明名为key.jks的新密钥库的参数。 我们定义了密钥库的密码和此密钥库将使用的私钥的密码。 我们还将私钥分配给密钥库中的某些别名(在本例中为client )。 接下来,我们指定源文件( key.p12 ),该文件的格式和原始密码。

使用trusted.jkskey.jks我们已经准备好进行编码。 第一步,我们必须描述我们如何使用密钥库。

File trustedKeystoreFile = new File("trusted.jks");
File keystoreFile = new File("key.jks");SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustedKeystoreFile, "<<trusted_keystore_password>>".toCharArray()).loadKeyMaterial(keystoreFile, "<<keystore_password>>".toCharArray(), "<<original_password_of_PKCS12_file>>".toCharArray()).build();SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslcontext,new String[]{"TLSv1.2"},null,SSLConnectionSocketFactory.getDefaultHostnameVerifier());

我们获取了密钥库文件,并构建了SSL上下文。 接下来,我们创建了套接字工厂,该套接字工厂为我们的请求提供了正确的HTTPS连接。

最后,我们可以从Java调用端点:

try (CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build()) {HttpGet httpGet = new HttpGet("https://ourserver.com/our/endpoint");try (CloseableHttpResponse response = httpclient.execute(httGet)) {HttpEntity entity = response.getEntity();System.out.println(response.getStatusLine());EntityUtils.consume(entity);}
}

做完了 在创建了两个额外的文件(密钥库)之后,这些文件等效于我们的原始证书和私钥,我们使用Java实现了相互身份验证 。 用Java实现HTTPS连接也许有一定道理,但是现在这只是一个头痛的事情。

翻译自: https://www.javacodegeeks.com/2016/03/mutual-problems-2.html

多个定时器相互干扰的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebRTC---进阶篇】(一)服务器基础编程

一个最简单的服务器程序 server.h /*** Server Class ** @author lichao* @date 2019-08-07* @copyleft GPL 2.0*/#ifndef __SERVER_H__ #define __SERVER_H__namespace avdance {class Server {public:Server(); //consrtuct~Server(); //destructpublic:void run();};} //…

servlet容器_SpringBoot是否内置了Servlet容器?

SpringBoot是否内置了Servlet容器&#xff1f;SpringBoot内置了Servlet容器&#xff0c;这样项目的发布、部署就不需要额外的Servlet容器&#xff0c;直接启动jar包即可。SpringBoot官方文档上有一个小章节内置servlet容器支持用于说明内置Servlet的相关问题。在SpringBoot源码…

计算机专业开学要带电脑吗,大学上课要带电脑吗

大学刚开学&#xff0c;上课的时候学生们要不要带电脑呢&#xff0c;想必这个问题一直对还没进入大学的准大学生来说很困扰&#xff0c;下面是小编整理的详细内容&#xff0c;一起来看看吧&#xff01;大学上课要带电脑吗大学上课能否带电脑需要看老师的要求。大学课程书本知识…

【WebRTC---进阶篇】(二)libevent实现高性能网络服务器

libevent编译与安装 libevent官网 Linux平台安装编译libevent wget -c addr --no-check-certificate ./configure --prefix=/usr/local/libevent make -j 8 make install #include <event2/listener.h> #include <event2/bufferevent.h> #include <event2/b…

突然讨厌做前端,讨厌代码_不要讨厌HATEOAS

突然讨厌做前端,讨厌代码或我如何学会不再担心和爱HATEOAS REST已成为实现Web服务的事实上的解决方案&#xff0c;至少已成为一种流行的解决方案。 这是可以理解的&#xff0c;因为REST在使用HTTP规范时提供了一定程度的自我文档。 它经久耐用&#xff0c;可扩展&#xff0c;并…

html按钮冻结,Vue js按钮冻结dom

我想切换一个包含加载动画的按钮按钮&#xff0c;直到该函数完成使用v-if。但是当我按下按钮时&#xff0c;DOM冻结&#xff0c;span元素不变&#xff0c;直到函数调用结束。我如何让DOM不冻结并显示加载图标&#xff1f;非阻塞按钮按下可能是一个解决方案&#xff1f;Vue js按…

【WebRTC---进阶篇】(三)各流媒体服务器的比较

多人音视频架构 Mesh方案 多对多大多进行P2P,在国内P2P直连穿越会出现很大问题。 MCU方案 客户端连接后,对应每个终端都有一个模块进项上传。再将音视频进行拆分解码。进行混屏,压缩编码分别推动给每个终端。 SFU方案 sfu不进行编解码,只是进行转发。只对订阅的终端进行…

注释嵌套注释_DIY注释

注释嵌套注释从Java 5开始&#xff0c;Java中出现了注释。 我想做一个自己的注释&#xff0c;只是为了看看需要什么。 但是&#xff0c;我发现它们只是接口。 有擦 接口后面没有牙。 必须执行一些代码。 我认为这是橡胶行之有效的方法&#xff0c;我真的找到了解决方法。 首先…

汇编 cmp_汇编复习

第一章计算机组成五部分&#xff1a;&#xff08;运算器、控制器&#xff09;、存储器、输入/输出设备↑↑ CPU ↑↑ ↑内存↑三条总线&#xff1a;控制总线、地址总线、数据总线不同进制及BCD码的转换特殊ascll ‘0’~‘9’—— 30H ~ 39H‘A’~‘F’—— 41H ~ 46H回车 —— …

【WebRTC---进阶篇】(四)mediasoup服务器的布署与使用

Nodejs安装 Nodejs安装 下载mediasoup Demo,并配置 详细GitHub地址 https://github.com/versatica/mediasoup-demo

睡眠是锁定计算机怎么设置密码,电脑休眠锁屏怎么设置

想要保护好自己的隐私&#xff0c;就要懂得电脑休眠锁屏怎么设置哦&#xff01;什么&#xff1f;你不会设置&#xff1f;不怕&#xff0c;小编这就来为您支招&#xff01;请看下文内容&#xff01;电脑休眠锁屏怎么设置用户账户面板1、首先您需要创建用户密码&#xff0c;如果您…

junit5和junit4_JUnit 5 –设置

junit5和junit42015年11月&#xff0c; JUnit Lambda团队展示了他们的原型 。 此后&#xff0c;该项目更名为JUnit 5&#xff0c;并于2016年2月发布了Alpha版本。我们将在一系列简短文章中进行探讨&#xff1a; 建立 基本 建筑 条件 注射 … 本节讨论JUnit 5的设置&…

markdown 生成目录_github上如何为markdown文件生成目录

写在前面熟悉markdown都知道可以使用[TOC]自动生成markdown文件的标题目录&#xff0c;比如在typora&#xff0c;vscode(需要插件)等本地编辑器中&#xff0c;或者在CSDN等网页编辑器中&#xff0c;但是github却不支持[TOC]标签&#xff0c;至于为什么不支持感兴趣的可以深入搜…

【WebRTC---进阶篇】(五)mediasoup的信令系统

mediasoup demo分析 app 客户端部分 broadcasters 推拉流部分 server 服务端部分 config.js 相当于一个配置文件&#xff0c;获取一些基本配置信息。获取的信息来交给server.js。 server.js 先从config.js获取信息&#xff0c;然后启动HTTPS webSocket服务等&#xff0c;…

axure html尺寸,axure怎么确定尺寸

回答&#xff1a;您好如做的是室内设计的话&#xff0c;那么来说可能会些参数提供给您的(例如长宽高)如果没有参数的话&#xff0c;只要把比例做好就可以了。只要比例做好了&#xff0c;东西看起来就自然像。至于教程的话&#xff0c;一般录制教程前都会有做好准备的&#xff0…

java工程引入scala_引入ReactiveInflux:用于Scala和Java的无阻塞InfluxDB驱动程序,支持Apache Spark...

java工程引入scala我很高兴宣布Pygmalios开发的ReactiveInflux的第一个发行版。 InfluxDB错过了Scala和Java的非阻塞驱动程序。 不变性&#xff0c;可测试性和可扩展性是ReactiveInflux的关键功能。 加上对Apache Spark的支持&#xff0c;它是首选武器。 https://github.com/p…

exe打包工具哪个最好_为你的 Python 程序写个启动工具箱

到目前为止&#xff0c;公众号已经介绍了不少图形界面的软件&#xff0c;比如猜数游戏、PDF阅读器、贪吃蛇游戏、天气查询软件、PDF 阅读器等。为了方便他人使用&#xff0c;我们常把图形界面打包成 exe 文件。但是如果我们只是为了自己使用方便的话&#xff0c;我们有必要把程…

【WebRTC---进阶篇】(六)SELECT网络模型

select函数原型 int WSAAPI select(_In_ int nfds,_Inout_opt_ fd_set FAR * readfds,_Inout_opt_ fd_set FAR * writefds,_Inout_opt_ fd_set FAR * exceptfds,_In_opt_ const struct timeval FAR * timeout); 函数功能:监视多个文件描述符的状态变化,在IO中负责IO的第一步…

计算机管理没有打印机列队,在Windows清除打印队列如果打印机被卡住,也没有打印输出...

我相信自己已经勾起回忆一拉似曾相识 &#xff0c;右侧的主题&#xff1f; 我们每个人&#xff0c;在一段时间或其他&#xff0c;都在打印过程中面临的问题&#xff0c;特别是给打印命令&#xff0c;并打印输出不休后等待。 无论是在家里还是办公室里&#xff0c;那就是我们所有…

gatling 使用_使用Gatling + Gradle + Jenkins Pipeline为您的JAX-RS(和JavaEE)应用程序进行连续压力测试...

gatling 使用在这篇文章中&#xff0c;我将解释如何使用Gatling项目为您的JAX-RS Java EE端点编写压力测试&#xff0c;以及如何将它们与Gradle和Jenkins Pipeline集成&#xff0c;因此&#xff0c;除了进行简单的压力测试外&#xff0c;您还可以使用以下方法&#xff1a; 连续…