什么是TLS?
TLS即”传输层安全性协议””Transport Layer Security”的缩写,其前身为”安全套接层”(Secure Sockets Layer,简称SSL),两者主要用于实现”超文本传输安全协议”(即https),原理不再赘述
发展历史
协 议 | 年 份 |
---|---|
SSL 1.0 | 1994 |
SSL 2.0 | 1995 |
SSL 3.0 | 1996 |
TLS 1.0 | 1999 |
TLS 1.1 | 2006 |
TLS 1.2 | 2008 |
TLS 1.3 | 2018 |
标准SSL/TLS握手流程
- 客户端(用户)访问超文本传输安全协议网站,浏览器将支持的协议版本号,支持的算法,产生的随机数等其他所需信息发送给服务器
- 服务器向客户端(用户)回传共同支持的最新版本的协议以及算法等信息,同时还会传送自己的证书
- 客户端(用户)验证证书合法性
- 客户端(用户)产生一个对称加密算法密码用于接下来的握手,并使用服务器传送过来的证书进行非对称加密算法加密操作(证书相当于非对称加密算法中的公钥)
- 客户端(用户)将加密好的密码传送回服务器,根据非对称加密算法特性,服务器使用证书对应的私钥进行解密,得到密码
- 客户端(用户)使用约定好的密码与服务器通讯并指明一个正式的高强度密码用于数据通讯
- 服务器返回,确认使用正式的高强度密码进行数据通讯
- 握手结束,建立在安全协议层面的加密数据传输开始
SSL/TLS双向认证流程
- 客户端(用户)访问超文本传输安全协议网站服务器,浏览器将支持的协议版本号,支持的算法,产生的随机数等其他所需信息发送给服务器
- 服务器向客户端(用户)回传共同支持的最新版本的协议以及算法等信息,同时还会传送自己的证书,并要求验证客户端(用户)证书
- 客户端(用户)验证证书合法性(是否为可信机构签发,是否过期,与域名是否一致等)
- 客户端(用户)产生一个对称加密算法密码用于接下来的握手,并使用服务器传送过来的证书进行非对称加密算法加密操作(证书相当于非对称加密算法中的公钥)
- 客户端(用户)将加密好的密码传送回服务器的同时也传送自己的证书,服务器验证证书合法性,根据非对称加密算法特性,服务器使用证书对应的私钥进行解密,得到密码
- 客户端(用户)使用约定好的密码与服务器通讯并指明一个正式的高强度密码用于数据通讯
- 服务器返回,确认使用正式的高强度密码进行数据通讯
- 握手结束,建立在安全协议层面的加密数据传输开始
区 别
标准的超文本传输安全协议主要业务是对公,所以不需要验证用户是否有访问的合法性
而双向认证时服务器会验证是否为指定CA签发的用户证书,若没有证书或非指定CA签发的即判定不合法,拒绝连接,客户端返回错误400
意义与价值
在私有服务中可以避免不合法用户访问服务器应用,相对加强了服务器的安全性,
避免了通过爆破,社工,漏洞等手段对线上应用以及服务器的威胁
实现方式
以Nginx为例,在SSL配置区域追加以下两行
ssl_client_certificate /data/ssl/ca.crt; ssl_verify_client on;
其中第一行指明可信的客户端(用户)CA证书位置
第二行表示强制启用客户端认证(双向认证)
必要时可以通过
ssl_crl /data/ssl/ca.crl;
指明Certificate Revoke List文件位置,实现例如因离职等原因证书提前吊销数据的查询
示例配置如下
server { listen 443 ssl; server_name baidu.com; access_log off; ssl on; ssl_certificate /data/ssl/server.crt; ssl_certificate_key /data/ssl/server.key; ssl_client_certificate /data/ssl/ca.crt; ssl_crl /data/ssl/ca.crl; ssl_verify_client on; location / { } }
发表回复