#HTTPS
有几个疑惑想看看有没有大佬能帮忙解答一下:
1、HTTPS的SSL握手过程中为什么要使用随机数?为什么需要三个随机数?
2、HTTPS前两个随机数为什么不用加密但第三个要加密?
全部评论
其实不是随机数,而是加密用的密钥。 因为我们将CA证书(公钥私钥对)部署在服务器,因此客户端第一次产生的key1,没办法加密,服务端收到之后,也会产生一个 key2,并将自己的公钥发送给客户端,之后客户端在生成一个 key3,这个key3用公钥加密(公钥加密之后,只有服务器的私钥才能解密)。因此key1没办法加密,key2如果用公钥加密了,客户端没办法解密key2,因此key2也不能加密。之后客户端自己生成一个key3,用公钥加密之后,发送给服务端,服务端用私钥才能解密
4 回复 分享
发布于 2021-04-08 10:40
在服务端和客户端都有三个随机数之后,会使用握手过程中协商的算法,使用三个随机数生成用于对称加密的密钥,握手完成后的数据,使用这个密钥来进行对称加密。(因为非对称加密比对称加密会消耗更多资源) 使用三个随机数的原因是,计算机的生成的随机数都是伪随机数,使用一个随机数不够安全。可以认为由两台计算机生成三个伪随机数无限接近随机数,生成的密钥是安全的。
3 回复 分享
发布于 2021-04-12 22:12
随机数是用来保证这一次连接的有效性的
点赞 回复 分享
发布于 2021-04-28 19:39
可以看看dh算法
点赞 回复 分享
发布于 2021-04-28 01:40
😃谢谢
点赞 回复 分享
发布于 2021-04-08 23:12

相关推荐

04-19 20:28
已编辑
门头沟学院 Java
只背了threadLocal的存储特点和底层原理,以及内存泄露原因,结果被问异步的线程怎么访问子线程?直接懵了 现在来补充这块盲区。Java 主线程中存储的 ThreadLocal 数据,异步子线程、线程池为什么获取不到?有哪些解决方案?各自优缺点?答:1. 原生 ThreadLocal 底层限制每个线程独立拥有自己的  ThreadLocalMap ,天然线程隔离;主线程的 Map 与异步/子线程 Map 完全独立,因此异步线程直接  get()  拿到  null 。解决方案:2. 方案一:InheritableThreadLocal(JDK 原生)- 原理:Thread 类内部存在  inheritableThreadLocals  集合,新建子线程时会浅拷贝父线程该集合数据,实现父子线程传递。- 致命缺点:拷贝逻辑只执行在线程构造方法;线程池、@Async 线程长期复用,不会重复拷贝,导致上下文失效、出现脏数据,生产不推荐。3. 方案二:临时简易方案(无依赖)主线程提前手动  get()  取出 ThreadLocal 数据,转为有效final局部变量,直接传给异步 Lambda/内部类使用;拓展:方法内局部变量被异步引用,必须为有效final(不可二次赋值),成员变量、静态变量无此限制。4. 方案三:生产最终方案(TransmittableThreadLocal 阿里 TTL)- 核心原理:在异步任务提交时刻主动捕获主线程上下文,任务执行时绑定到复用线程,执行完毕自动清理。- 优势:完美兼容线程池、@Async、CompletableFuture 所有异步场景;无需手动传参,彻底摆脱  final  限制,是企业级上下文传递标准方案。其他问题追问1:InheritableThreadLocal 线程池失效的根本原因?线程池线程提前初始化、长期复用,拷贝逻辑只在线程创建时执行一次,无法同步主线程最新的 ThreadLocal 数据。追问2:TTL 与 InheritableThreadLocal 核心区别?InheritableThreadLocal 是线程创建时拷贝;TTL 是任务提交时拷贝,专门适配线程复用场景。追问3:异步代码里,为什么主线程局部变量必须要有效final?局部变量存储在线程栈,异步线程无法跨栈访问;底层会进行值拷贝,语法禁止二次赋值,防止多线程数据错乱。
发面经攒人品
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务