本文目标
读完本文,能够明白
- 什么是HTTPS、TLS(SSL),TLS和HTTPS的关系
- 什么是数字证书及认证过程
- 摘要、数字签名
- 对称、非对称加密算法
HTTPS概述
HTTPS,也称作HTTP over TLS。就是在安全的传输层上发送的HTTP。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS方案
安全的HTTP是可选的。因此,对于Web服务器发起请求时,我们需要有一种方式来告知Web服务器去执行HTTP的安全协议版本。这是在URL的方案中实现的。
请求一个客户端对某个Web资源执行某事务,它会去检查URL的方案。
- 如果URL的方案是HTTP,客户端就会打开一条到服务器端口80(默认)的连接,并发送老的HTTP指令。
- 如果URL方案是HTTPS,客户端就会打开一条到服务器端口443(默认)的连接,然后与服务器握手,以二进制格式与服务器交换一些SSL安全参数,附上加密的HTTP命令。
安全传输过程
在HTTPS中,客户端首先会打开一条到Web服务器端口443的连接。一旦建立TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。握手完成后,SSL初始化就完成了,客户端就可以把请求报文发送给安全层了。在将这些报文发送给TCP之前,要先对其加密。
SSL握手过程
在发送已加密的HTTP报文之前,客户端和服务器需要进行一次SSL握手,在这个握手的过程中,主要完成以下工作:
- 交换协议版本号
- 选择一个两端都了解的加密方式
- 对两端身份进行认证
- 生成临时的会话密钥,以便加密信道
- [明文] 客户端发送随机数client_random和支持的加密方式列表
- [明文] 服务器返回随机数server_random ,选择的加密方式和服务器证书链
- [RSA] 客户端验证服务器证书,使用证书中的公钥加密premaster secret 发送给服务端
- 服务端使用私钥解密premaster secret
- 两端分别通过client_random,server_random 和premaster secret 生成master secret,用于对称加密后续通信内容
数字证书
在访问HTTPS的网站中会看到地址栏左侧会有绿色的小锁头,点击打开可以看到这其实是网站的数字证书。
什么是数字证书
数字证书简称CA,它由权威机构给某网站颁发的一种认可凭证,这个凭证是被大家(浏览器)所认可的。以数字证书为核心的加密技术(加密传输、数字签名、数字信封等安全技术)可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性及交易的不可抵赖性。使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全。(百度百科)
为什么需要数字证书
互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。
客户端为什么需要验证数字证书
通过中间人攻击将请求拦截伪造证书等手段来欺骗客户端,存在安全风险。
如何验证数字证书的合法性
需要通过数字签名来验证数字证书等合法性。
数字签名
证书是一个站点的身份证,但是身份证也可以被伪造,为了保证这个证书是真的我们需要数字签名。我们会将证书内容用签名算法生成一个值,我们称之为“摘要”。然后将该摘要用主机的私钥加密,加密后的内容就是我们的数字签名。
当客户端收到附带数字签名的数字证书时,会通过数字证书中的证书签名算法将该证书生成一个摘要,在用服务器众所周知的公钥解密数字签名,看得到的摘要是否相同,相同那就说明证书是真的。
如果公钥解密后得到的摘要与生成的摘要不符那么可能有两种情况
- 发送方身份不是目的主机
- 目的主机发送的证书被篡改
对称和非对称加密算法
对称加密又称私钥加密,是一种混淆算法,能够在非安全信道上进行安全通信。
非对称加密又称公钥加密,它是另一种方法,使用两个密钥,而不是一个;其中一个密钥是私密的,另一个是公开的。顾名思义,一个密钥用于私人,另一个密钥会被所有人共享。这个两个密钥之间存在一些特殊的数学关系。RSA是目前普遍部署的非对称加密算法。