基于SSL/TSL证书实现HTTPS双向认证1-原理介绍
本文主要讲述了以下内容:
- 介绍了SSL和TSL的关系,
- 服务端server申请CA数字证书,
- HTTPS认证的过程和原理。
SSL和TSL的关系
由于HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”。
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
HTTPS:HTTP + TLS (在HTTP上套了TLS)
HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)
服务端申请证书
HTTPS认证需要服务端首先申请一份证书,这里介绍一下如何申请证书。
名词解释
- CA机构:国家所认可的具有权威、公平公正的第三方机构,其作用是验证数字证书拥有者是否合法,并以此签发证书。
- CA数字证书:由CA机构发行的数字证书,其中包括两把密钥:一把公钥和一把私钥。服务端可以利用相关的工具来生成CA数字证书,以此加密自己的文件或是保护自己的网址。
证书文件格式
证书相关文件有多种格式,常见格式:.crt
,.key
,.req
,.csr
,.pem
,.der
。
xx.crt
:证书文件xx.key
:私钥文件xx.req
:请求文件xx.csr
:请求文件xx.pem
:证书文件为 pem 格式(文本文件)xx.der
:证书文件为 der 格式(二进制文件)
实际上,上述文件的扩展名可以随意命名。只是为了容易理解文件的功能而选择大家都认识的命名方式。但是,上述文件是有格式的,只能是 .pem
格式或者 .der
格式。使用什么格式的文件取决于需求。
服务端申请证书过程
- 服务端server生成
.crt
证书文件,其中包括公钥
、申请者信息
、域名
。 - server把证书文件发给CA机构:
(1) CA机构根据crt文件生成一段Hash摘要,
(2) 用CA私钥加密,生成签名。 - CA机构把证书发给server,其中包括
.crt
文件、签名
。
HTTPS认证过程
主角:客户端client、服务端server。
客户端client –〉 服务端server:
client发起访问,携带cipher suit(密码套件,包括自己可用的加密方案)
、随机数1
(用于后续对称密钥)。客户端client 〈– 服务端server:
server发送确认好双方的加密方案
、随机数2
。客户端client 〈– 服务端server:
(1)server发送数字证书
,
(2)client验证证书:拿CA机构的公钥去验证该证书,若成功,则获得server公钥,生成随机数3
,用服务端公钥加密随机数3作为pre-key
。数字证书用处:
若黑客中途篡改,则签名验证不会通过;
若黑客修改证书信息后再重新计算签名?不可能,因为黑客拿不到CA机构的私钥。客户端client –〉 服务端server:
(1)client发送pre-key
;
(2)server用服务端私钥解密pre-key,得出随机数3
。客户端client <–> 服务端server:
双方用随机数1、2、3
生成对称密钥master-key
,之后用master-key传输数据。