简介
本期答疑解惑将和大家一起认识SSL/TLS 协议。请尝试回答以下几个问题:
- 使用浏览器访问https网站和http网站有什么不同?
- SSL协议作用于网络模型的哪一层?
- 你知道CSDN,博客园正在使用的是什么类型的SSL证书吗?
- SSL,TLS, mTLS之间是什么关系?
非对称加密算法
非对称加密算法是数学家们创造出来的,它是SSL协议的基础。该算法的目的是生成一对密钥:公钥和私钥,密钥通常是一段二进制数据。公钥是公开的,任何人都可以获得;而私钥只由服务器保管。
公钥和私钥永远是一对一的关系,公钥加密后的数据只能由私钥解密。
SSL协议
SSL协议是一种介于应用层和传输层之间的安全协议。SSL建立安全链接之后,应用层将不再把数据直接交给传输层,而是通过SSL加密通道发送,避免中间人攻击。
应用层:HTTP,HTTPs,FTP等 |
SSL,TLS,mTLS |
传输层:TCP, UDP等 |
在详细了解SSL协议机制之前,我们先来认识下什么是SSL证书。
SSL证书
SSL证书就是服务器的电子身份证。任何人都可以制作SSL证书,但只有全球公认的证书颁发机构(CA)颁发的证书才能被浏览器和操作系统所信任。这是因为浏览器和操作系统预装了受信任的CA根证书,并且能够在线查询受信任的证书库,验证服务器的真实性。
证书通常包含了服务器所有者的信息,比如持有者的名称,有效期,公钥,加密算法等信息。
- 客户端拿到证书中的公钥之后,可以对要发送的数据进行加密,只有服务器所持有的私钥才能解密,因此保证了数据传输的安全性。
- 证书包含了自身的数字签名,它由证书内容和私钥计算生成,除非攻击者获得了服务器手里的私钥,否则无法被篡改。
- 信任链:CA不会直接使用根证书为第三方网站签发证书,而是使用中间证书签发,中间证书由CA根证书直接签发。CA使用三层证书信任链是为了将证书管理划分成多个部分,降低管理成本和风险,提高管理效率。
- 浏览器会向上追溯证书链和证书的有效期,直到找到受信任的证书为止。
早期SSL工作原理
早期SSL的核心思想是通过非对称加密交换证书和主密钥,然后使用主密钥和对称加密算法传输内容。
原因很简单:对称加密解密计算速度更快,而使用非对称加密可以避免生成的主密钥被攻击者截获。
握手协议:
- 使用浏览器访问https站点时将发起SSL请求,内容包括浏览器支持的加密算法列表。
- 服务器确定通信所用的算法,并返回自己的SSL证书(包含公钥)。
- 浏览器按照我上面讲的内容去检查证书是否有效,无法验证的证书将给出风险警告。
- 浏览器信任服务器证书之后,生成一个密钥并通过证书公钥进行加密,然后发给服务器。
- 服务器使用自己持有的私钥解密,拿到客户端生成的密钥之后,就可以使用它进行对称加密通信了。
TLS工作原理
人们逐渐发现早期SSL协议存在许多安全漏洞,如 Heartbleed 漏洞、POODLE 漏洞等,最终于2014年由谷歌微软等公司倡导下陆续宣布弃用。
不过早在1999年,IETF将SSL 3.0进行了修改和扩展,并标准化为了TLS协议。经过不断完善,TLS已经发展成了互联网上最常用的加密协议。我们也可以将TLS看作是SSL的升级版本。
握手协议:
- 客户端向服务器发送握手请求,并附上自己支持的加密算法列表和一个客户端随机数。
- 服务器选择一种加密算法,并生成一个服务器随机数,发送给客户端。
- 服务器将发送TLS证书给客户端,并可能要求客户端也提供证书。
- 客户端验证服务器证书,按照服务器要求选择是否提供自身的证书。
- 客户端再次生成一个随机数,称为预主密钥,使用服务器公钥加密后发送给服务器。
- 服务器使用私钥解密,获得预主密钥。
- 客户端和服务器使用服务器随机数,客户端随机数,预主密钥,并按照前面约定的加密算法,生成主密钥,之后再由主密钥通过加密算法生成会话密钥。
- 会话密钥将被用于之后的对称加密通信。
TLS与早期SSL的主要区别
TLS作为SSL的升级版本,修补了大量漏洞,并且优化了握手通信过程。
- TLS简化了SSL握手流程(我这里对SSL握手流程介绍的比较简单)。TLS默认需要发送4次请求, 也被称为4次握手。而SSL需要7或者10次请求才能完成握手阶段。
- TLS使用更严格的加密算法,移除了MD5, SHA1等存在设计漏洞的加密算法,更加安全。
- 警报消息:通信过程中可能出现错误,例如证书过期、加解密失败,握手失败等问题。SSL中包含警告和致命两种级别的信息, 当发生致命级别的错误时,链接会被立刻终止,SSL中警报消息是未加密的。TLS新增了“关闭”来通知会话结束,并且TLS的警报消息是加密的。
- TLS证书与SSL证书并无太大区别,虽然SSL已经淘汰了,不过大家还是习惯将证书命名为SSL证书。
mTLS简介
前面说过,在TLS握手阶段:服务器将发送TLS证书给客户端,并可能要求客户端也提供证书。
要求客户端也必须提供证书的TLS被称为双向TLS认证,也就是mTLS。
客户端证书通常由企业内部CA颁发,以确保证书的可信度。在使用mTLS时,服务器需要信任客户端证书的CA,并使用CA的公钥来验证证书的数字签名。如果证书的验证成功,则服务器可以确认客户端的身份,并继续进行通信。如果证书验证失败,则服务器可以拒绝该客户端的连接请求。
SSL证书种类
前面介绍的都是理论性的内容,接下来我们认识下常见的证书类型。
EV(Extended Validation )
认证最严格,最贵的证书类型,需要验证申请者身份,营业执照等,如:https://www.paypal.com
OV(Organization Validated)
OV SSL证书保证级别接近EV,其主要目的是在交易过程中加密用户的敏感信息。商业或面向公众的网站应该安装 OV SSL 证书,以确保共享的任何客户信息保持机密。
例如我们正在使用的CSDN, 支付宝等:
DV(Domain Validated)
最容易获取的证书,它通常用于不需要收集个人信息的网站,如公司展示官网,博客等。
博客园使用的其实是DV证书:
个人证书
故名思意,自己搭建的网站,自己造的证书,访问这类网站时会收到浏览器的风险提醒。
我在网上随便找了一个:杨青青个人博客_女程序员的个人网站
本地证书管理
打开浏览器设置-安全隐私-证书管理,或者Windows的证书管理器,你可以看到本地安装的,受信任的证书,使用受信任的证书签发的证书,也将被信任。
这可以帮助你在公司内部环境中使用 SSL/TLS 加密来保护网络通信,搭建基于https的网站。
总结
好了,这期答疑解惑就到这里,大家还有什么问题吗?