

image.png
SSL单向身份验证仅要求站点部署SSL证书. 任何用户都可以访问它(IP限制等除外),但是服务器提供身份验证.

image.png
双向认证需要服务器和客户端提供身份认证,只能由服务器允许的客户端访问,安全性相对较高.
SSL / TLS工作流程
图1 SSL / TLS工作流程
CA: 证书颁发机构. 它类似于国家出入境管理处,后者向他人发行护照. 它也类似于国家工商行政管理总局,后者向公司颁发营业执照.
它具有两个主要属性:
1)CA本身是受信任的// //国际认可的
2)向他值得信赖的申请人颁发证书//和护照一样,要确定您的合法身份,您不能是分子或叛乱分子. 当然,您需要受到保护,同时,CA可以随时吊销您的证书.
证书是什么样的?实际上,您的计算机中有一堆CA证书. 你能看看吗?
360浏览器: 选项/设置->高级设置->隐私和安全性->管理HTTPS / SSL证书->证书颁发机构
Firefox浏览器: 首选项->高级->证书->查看证书->证书颁发机构
chrome浏览器: 设置->高级->管理证书->授权中心
ubuntu: / etc / ssl / certs
这些是CA证书!
CA证书ca.crt和SSL服务器证书server.crt之间有什么关系?
1)SSL Server自己生成一个私钥/公钥对. server.key / server.pub //私钥加密,公钥解密!
2)server.pub生成请求文件server.req. 请求文件包含一些服务器信息,例如域名/申请人/公共密钥等.
3)服务器将请求文件server.req提交给CA. CA验证正确之后,它将使用ca.key和请求文件来生成server.crt
4)由于ca.key和ca.crt是一对,因此ca.crt可以解密server.crt.
在实际应用中: 如果SSL客户端要验证SSL服务器. 然后,SSL服务器必须将其证书server.crt传递给客户端. 然后,客户端使用ca.crt来验证server.crt的合法性. 如果它是网络钓鱼网站,则CA将不会向他颁发有效的server.crt证书,因此客户端将使用ca.crt进行验证,并且它将失败. 例如,如果浏览器是客户端,则您要访问合法的淘宝网站,但如果您不小心访问了该浏览器,则浏览器将检查此假淘宝网络钓鱼网站的非法性,并提醒用户不要继续访问!这样,可以确保客户端的所有https访问都是安全的.
2.2单向认证和双向认证

什么是SSL / TLS单向认证和双向认证?
单向身份验证意味着只有一个对象可以验证对等证书的有效性.
通常使用客户端来验证服务器的合法性. 然后客户端需要一个ca.crt,服务器需要server.crt,server.key
双向认证是指相互验证. 服务器需要验证每个客户端,客户端也需要验证服务器.
服务器需要server.key,server.crt,ca.crt
客户端需要client.key,client.crt,ca.crt
2.3证书详细工作流程
图2证书详细工作流程
1)申请认证: 服务器需要生成公钥私钥对pub_svr&pri_svr,并同时根据pri_svr生成请求文件csr,并将其提交给CA. csr包含公钥,组织信息,个人信息(域名)和其他信息. (图1中的server.req是csr请求文件)
2)审核信息: CA通过各种方式(例如组织是否存在,企业是否合法以及它是否拥有域)来验证申请人提供的信息的真实性,例如和离线名称.
3)颁发证书: 如果信息得到批准,则CA将向申请人颁发认证文件证书.
证书包含以下信息: 申请人的公钥,申请人的组织信息和个人信息,发布机构CA的信息,有效时间,证书序列号以及其他明文形式的信息ssl认证,并且还包含一个签名.
签名生成算法: 首先,使用哈希函数来计算公共明文信息的信息摘要. 然后,CA使用私钥对信息摘要进行加密,并且密文是签名. (生成图1中的server.crt)
4)返回证书: 如果客户端请求验证服务器,则服务器需要返回证书文件. (在图1中,握手返回到server.crt)
5)客户端验证证书: 客户端读取证书中的相关明文信息,使用相同的哈希函数计算消息摘要,然后使用相应CA的公钥解密签名的数据,并比较证书. 如果它们相同,则可以确的有效性,即公钥是合法的. 然后,客户端将验证与证书有关的域名信息以及是否取消了有效期.
客户端将具有内置的受信任CA证书信息(包括公共密钥). 如果不信任该CA,则找不到相应CA的证书,并且该证书也将被确定为非法. (在图1中,检查是可选的,我们可以选择不验证服务器证书的有效性)
6)密钥协商: 验证后,服务器和客户端将进行密钥协商. 接下来,服务器和客户端将使用对称密钥加密. (出色的对称加密时间性能)(图1中的pre-master / change_cipher_spec / encrypted_handshake_message过程)
7)数据传输: 服务器和客户端使用对称密钥来加密和解密数据.
2.4单向SSL / TLS身份验证过程
---------------------
(1)client_hello
客户端发起一个请求,以纯文本形式发送请求信息,包括版本信息,密码套件候选列表,压缩算法候选列表,随机数,扩展字段和其他信息. 相关信息如下:
受支持的TSL协议版本最高,从低到高SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,目前不再使用低于TLSv1的版本;
客户端支持的密码套件列表,每个密码套件对应于以前的TLS原理中的四个功能的组合: 身份验证算法Au(身份验证),密钥交换算法KeyExchange(密钥协商),对称加密算法Enc(信息加密)和信息摘要Mac(完整性检查);
用于后续信息压缩传输的受支持的压缩算法压缩方法列表;

随机数random_C,用于随后的密钥生成;
扩展字段扩展,支持协议和算法相关参数以及其他辅助信息等. 公共SNI是扩展字段,以后将分别讨论该字段的作用.
(2).server_hello + server_certificate + sever_hello_done
server_hello,服务器返回协商信息的结果,包括选择的协议版本ssl认证,选择的密码套件,选择的压缩方法,随机数random_S等的协商信息,其中随机数用于后续密钥协商;
server_certificates,服务器端配置相应的证书链,用于身份验证和密钥交换;
server_hello_done,通知客户端已发送server_hello消息;
(3). 证书验证
如上所述,[证书链]可信证书路径的可信度;
证书是否吊销吊销,离线CRL和OCSP都有两种,不同的客户端行为会有所不同;
到期日期到期日期,证书是否在有效时间范围内;
域名域名,检查证书域名是否与当前访问的域名匹配,并对匹配规则进行后续分析;
(4).client_key_exchange + change_cipher_spec + encrypted_handshake_message
client_key_exchange,在通过有效性验证后,客户端将计算一个随机数Pre-master,并使用证书公钥对其进行加密,然后将其发送到服务器;
此时,客户端已经获得了计算协商密钥所需的所有信息: 两个明文随机数random_C和random_S以及它们自己生成的用于计算协商密钥的Pre-master;
enc_key = Fuc(random_C,random_S,Pre-Master)
change_cipher_spec,客户端通知服务器,后续通信将使用协商的通信密钥和加密算法进行加密通信;
encrypted_handshake_message,结合以前所有通信参数的哈希值和其他相关信息,生成一条数据,并使用协商密钥会话密钥和算法进行加密,然后发送到服务器以进行数据和握手验证;
(5).change_cipher_spec +加密的握手消息
服务器使用私钥解密加密的Pre-master数据. 根据之前交换的两个明文随机数random_C和random_S,计算协商密钥: enc_key = Fuc(random_C,random_S,Pre-Master);
先计算所有接收到的信息的哈希值,然后解密客户端发送的crypted_handshake_message消息,以验证数据和密钥的正确性;
change_cipher_spec,验证通过后,服务器还发送change_cipher_spec通知客户端,后续通信将使用协商的密钥和算法进行加密通信;
encrypted_handshake_message,服务器还结合所有当前的通信参数信息来生成一条数据,并使用协商密钥会话秘密和算法来加密并发送给客户端;
(6). 握手结束
客户端计算所有接收到的信息的哈希值,并使用协商后的密钥对crypted_handshake_message进行解密,验证服务器发送的数据和密钥,并在验证后完成握手;
(7). 加密通讯

开始使用协商的密钥和算法进行加密通信.
2.5实际的Wireshark分析
我们构建的SSL / TLS服务器为192.168.111.100,客户端为192.168.111.101. 客户端需要验证服务器的合法性.
我们只查看TLSv1.1数据包:
第一个程序包(第25个)Client Hello程序包,即SSL / TLS单向身份验证过程的(1)
第二个软件包(第27号)服务器Hello软件包,包括服务器证书等. 这是SSL / TLS单向身份验证过程的(2)
第三包(第28号)服务器证书验证完成,并且同时发送客户端密钥交换+更改密码规范+加密握手消息. 也就是说,SSL / TLS单向身份验证过程(4)
第四包(第29号)密钥协商,更改密码规范+加密的hanshake消息. 即(5)SSL / TLS单向身份验证过程
第五个数据包(第30个)握手完成. 开始上层数据传输. SSL / TLS单向身份验证过程(7)
2.6 SSL / TLS相互认证过程
它与单向身份验证几乎相同,除了在客户端对服务器证书进行身份验证之后,客户端会将自己的证书client.crt传递给服务器. 服务器通过身份验证后,密钥协商开始.
实际的Wireshark分析:
与单向身份验证相同:
我们构建的SSL / TLS服务器为192.168.111.100,客户端为192.168.111.101. 客户端需要认证服务器的合法性,服务器还需要认证客户端的合法性!
我们只查看TLSv1.1数据包:
第一个程序包(第55号)Client Hello程序包,即SSL / TLS单向身份验证过程的(1)
第二个软件包(第57号)服务器Hello软件包,包括服务器证书等. 这是SSL / TLS单向身份验证过程的(2)
第三包(第60号)服务器证书验证完成,并且同时发送客户端证书client.crt,其中还包括客户端密钥交换+更改密码规范+加密的握手消息. 也就是说,SSL / TLS单向身份验证过程(4)
第四包(第61号)服务器验证客户端证书的有效性. 通过密钥协商后,请更改密码规范+加密的hanshake消息. 即(5)SSL / TLS单向身份验证过程
重发数据包(编号62)由于网络原因,TCP重发了60号数据包.
第五个数据包(第64个)握手完成. 开始上层数据传输. SSL / TLS单向身份验证过程(7)
2.7证书和其他格式说明
crt / key / req / csr / pem / der等扩展名是什么?
1).crt表示证书,.key表示私钥,.req表示请求文件,.csr表示请求文件,.pem表示pem格式,.der表示der格式.
您可以根据需要命名文件扩展名. 命名不同的扩展名只是为了了解需求. 但是,文件中的信息已格式化. 与exe和PE格式一样,证书有两种格式.

pem格式和der格式. 所有证书,私钥等可以是pem或der格式,具体取决于应用程序的需求.
pem和der格式可以相互转换:
openssl x509 -in ca.crt -outform DER -out ca.der // pem-> der
openssl x509-通知der -in ca.der -out ca.pem // der-> pem
pem格式: 加密的文本文件,通常以以下开头和结尾:
1
-----开始使用RSA私钥-----
-----结束RSA私钥-----
或:
-----开始证书请求-----
-----结束证书请求-----
或:
----开始证书-----
-----结束证书-----
der格式: 加密的二进制文件.
2)证书以纯文本形式包含申请人的公钥,申请人的组织信息和个人信息,颁发机构的CA信息,有效期,证书序列号等信息,并包含签名. 例如,查看百度证书的详细信息.
a)首先下载百度证书
要访问Firefox浏览器,请单击左上角的绿色小锁,单击向右箭头,单击更多信息,单击以查看证书,单击详细信息,然后单击导出. 您可以导出百度的证书baiducom.crt
b)查看证书详细信息的命令
openssl x509 -noout -text -in baiducom.crt
在详细信息中,存在一个字段: X509v3基本约束: CA: FALSE
此字段指示证书是CA证书还是常规的非CA证书. 有关详细说明,请参阅RFC5280#第4.2.1.9节,并且RFC5280还详细描述了证书的工作方法.
3)私钥加密,公钥解密!
2.8 SSL / TLS与Openssl,mbedtls之间是什么关系?
SSL / TLS是一种工作原理. openssl和mbedtls是SSL / TLS的特定实现,与TCP / IP协议和套接字之间的关系非常相似.
三: 在本地生成与SSL相关的文件
3.1证书生成脚本
我们使用makefile.sh脚本在本地创建一个CA(ca.crt + ca.key),并使用该CA分别向服务器和客户端颁发证书.
makefile.sh
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-217573-1.html
中国人在汉朝就已确立一夫一妻
天下唯你马头是大
豺狼来了用猎