最近在看公司的SSL协议实现,现将其流程总结如下:
步骤解释如下:
1.
client -> ClientHello
-> server。
(1). ClientHello
消息体 = Client.Version
(客户端协议版本)+ClientHello.Timestamp(
客户端时间戳)
+ClientHello.Random
(客户端随机数)+会话sessionID
+CipherSpecs
(client支持的算法集)+Certificate.SerialNumber(
服务器证书序列号)。
2.
server -> ServerHello
-> client。
(1).
server创建会话session ID
,缓存ClientHello.Timestamp
与ClientHello.Random
,根据CipherSpecs
的支持加密集合和server
自己支持的加密集合选择本次会话的加密算法集CipherSuite
。
(2).ServerHello
消息体 = Server.Version(
服务器协议版本号)
+ServerHello.Timestamp
(服务器时间戳)+ServerHello.Random(
服务器随机数)
+sessionID
(服务器会话)+CipherSuite
(本次会话指定的加密算法)+ServerCertificate(
服务器公钥证书)
。
(3).如要验证client身份,发送CertificateRequest
。
3.
client -> ClientKeyExchange
-> server
(1). client缓存ServerRNS(服务器随机数)
、ServerCertificate(服务器证书)
+sessionID
(服务器会话)+CipherSuite
(本次会话指定的加密算法集)
,生成客户端随机数(ClientRNC)。
(2). 用
客户端协议版本号+
随机数
生成客户端预主密钥premaster secret [PMS
],
使用
服务器证书公钥
加密 (PMS
+
ServerRNC
}
。
(3). 如果服务器发送CertificateRequest
按顺序连接,使用客户端的私钥签名,在CertificateVerify
中发送这个签名。
(4). 发送ChangeCipherSpec
声明切换到加密信道传输
。
(5). 用(PMS,ServerRNS,ClientRNC)计算客户端主密钥master secret[MS
]
,生用MS成信道验证的Finished
消息。将Finished
之前发出的和接收到消息(不包括Finished
本身)的二进制数据,按照顺序连接后,使用MS
做PRF
签名。
4.
server ->
ChangeCipherSpec
-> client
(1).
server使用私钥解密并取出{PMS
,RNC}
。使用PMS
、RNC
、RNS
计算MS
。
(2).
生成服务器的预主密钥premaster secret2 [PMS2
]
。使用PMS2
、RNC
、RNS
生成服务器主密钥master
secret2 [MS2
]
,在会话中保存MS2
作为传输密钥。
(3).
如果有ClientCertificate
,验证相关信息。验证客户端的Finished
信息。如果错误,返回标准失败信息。
(4).
生成服务器的Finished
,将Finished
之前发出的和接收到消息(不包括Finished
本身)的二进制数据,按照顺序连接后,使用MS
做PRF
签名。
(5).
回传客户端消息 = ServerKeyExchange[用MS对称加密(PMS2)]
+确认加密算法集ChangeCipherSpec
+发送自己的Finished
消息。
5.
client收到server信息后:
(1).
验证服务器的Finished
消息。如失败,切断当前连接。
(2).
根据协商好的对称加密算法,使用本地保存的MS
解ServerKeyExchange
。使用PMS2
、RNC
、RNS
生成MS2
作为session
密钥。在缓存中保存RNS2
。
- 大小: 97.5 KB
分享到:
相关推荐
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 安全传输层协议(TLS)...
为了便于更好的认识和理解SSL 协议,这里着重介绍SSL 协议的握手协议。介绍SSL协议双向认证的具体过程。
SSL交互和握手过程 SSL消息按如下顺序发送: 1.Client Hello 客户发送服务器信息,包括它所支持的密码组。密码组中有密码算法和钥匙大小; 2.Server Hello 服务器选择客户和服务器都支持的密码组到客户。 3....
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接...
一、SSL协议 SSL(Secure Sockets Layer)是一种工业标准,用于在Internet上提供安全的数据传输。它使用RSA数字签名算法,可以支持X.509证书和多种保密密钥加密算法。SSL的主要目的就是要解决Web上信息传输的安全...
SSL协议的工作流程: 1)客户端向服务器发送一个开始信息以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的信息时将包含生成主密钥所需的信息;3)客户...
第一章引言部分提出了选题的背景和意义,阐述了网上信息安全的主要问题,提出安全的重要性。第二章对证券交易系统进行深入的分析,及其安全交易流程,提出需要解决的安全问
本文主要讲解了 Java 语言实现基于 SSL 的 HTTP 通道的原理和实践,包括 SSL 协议的介绍、非对称加密的原理、SSL 握手流程的分析,以及 Java 语言中使用 Keytool 工具生成密钥对和证书的实践。 在网络通信中,安全...
"HTTPS工作流程传输协议、加密算法" HTTPS是应用层协议,实际上是HTTP协议的一种变种。HTTPS相比于HTTP多了一层SSL/TLS,其构造如下: 1. 证书加密:服务器在使用证书加密之前需要去证书颁发机构申请该服务器的...
虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个...
什么是OpenSSL 众多的密码算法、公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法。果真如此,在对你表示敬佩的同时,还是忍不住提醒你:这是一个令人望而生畏的过程。这个...
采样模组内部集成MQTT协议连接到阿里云物联网平台。实现消息订阅与发布
要实现https,首先我们需要申请一张SSL证书,这篇文章我主要介绍下边这几个方面: 1. SSL简单介绍 ...当然它内部又分记录协议和握手协议两个部分,这里如果有兴趣的可以去详细了解一下,我先简单介绍一下流程性的
2.1 SSL 协议详解 2.1.1 密码学概念 2.1.2 相关加密介绍 2.1.3 SSL 介绍及特性 2.1.4 SSH 的基本原理 2.2 Rss 与Feed 的概念区别 2.3 基于XMPP 协议的手机通讯方案 2.3.1 开发背景 2.3.2 Xmpp 协议介绍 2.3.3 ...
CertD CertD 是一个帮助你全自动申请和部署SSL证书...我们所说的续期,其实就是按照全套流程重新申请一份新证书。 免费证书过期时间90天,以后可能还会缩短,所以自动化部署必不可少 快速开始 本案例演示,如何配置自动
1 引言 ...3.3.2 SSL协议 3.4 数据库的设计 4 系统设计与实现 4.1 总体结构图 4.2 与数据库建立连接 4.3 口令认证及存储方式设计 4.4 数字证书创建 4.5 关键代码说明 5 测试 结 论 参考文献
基于java爬虫的就业大数据系统设计与实现 1 ...4.1.4SSL协议 9 4.2系统功能模块的实现 9 4.2.1登录功能实现 10 4.2.2爬虫抓取配置功能实现 10 4.2.3爬虫抓取资源功能实现 13 参考文献: 16 致 谢 17
我们经常用curl来访问web站点,web站点目前主要分为http和https两种协议,众所周知https类型的网站都是通过ssl协议+http协议的,是目前最安全的网站协议,访问此类网站的时候,会走ssl协议,验证访问者的证书,检测...
在系统的安全性方面,我们使用了SSL协议来确保敏感信息的安全传输。SSL协议是一种安全的网络通信协议,它可以确保数据的机密性和安全性。 在系统的维护方面,我们需要定期维护系统,以确保系统的稳定性和安全性。...
acme-client, letsencrypt协议的ACME的ruby 客户端 Acme::Client acme-client 是 ruby 中 ACME 协议的客户端实现。你可以在go和中找到服务器插件的ACME...ACME是项目的一部分,目的是为获取和更新流程提供免费的SSL/TL