在线文档教程

2. TLS及其前身SSL | 2. TLS and its Predecessor, SSL

2 TLS及其前身SSL

Erlang SSL应用程序为当前支持的版本实现SSL / TLS协议,请参阅ssl(3)手册页。

默认情况下,SSL / TLS通过TCP / IP协议运行,即使您可以使用与gen_tcpKernel中的模块相同的应用程序编程接口(API)插入任何其他可靠的传输协议。

如果客户端和服务器想要使用升级机制(如RFC 2817定义的)将常规TCP / IP连接升级到SSL连接,则Erlang SSL应用程序API将支持该连接。这对于例如在同一端口上支持HTTP和HTTPS并实现虚拟主机可能很有用。

2.1安全概述

为了实现身份验证和隐私,客户端和服务器在发送或接收任何数据之前执行TLS握手过程。在握手过程中,他们就协议版本和密码算法达成一致,使用公钥密码生成共享秘密,并可选择使用数字证书进行身份验证。

2.2数据隐私与完整性

一个对称密钥算法只有一个密钥。密钥用于加密和解密。与公钥算法(使用两个密钥,一个公钥和一个私钥)相比,这些算法速度很快,因此通常用于加密批量数据。

对称加密的密钥是为每个连接唯一生成的,并且基于在TLS握手中协商的秘密。

TLS握手协议和数据传输运行在使用密钥哈希消息真实性码(MAC)或基于哈希的MAC(HMAC)的TLS记录协议之上,以保护消息数据的完整性。在TLS RFC中:“消息认证码是一种单向散列,它是根据消息和一些秘密数据计算出来的,在不知道秘密数据的情况下难以伪造,其目的是检测消息是否已被修改。”

2.3数字证书

证书与驾驶执照或护照相似。证书持有者称为主题。证书使用证书颁发者的私钥进行签名。信任链的建立是通过让发行者轮流获得另一证书的认证等等,直到你到达所谓的根证书,这是自签名的,即自行发布的。

证书只由认证机构(CA)颁发。世界上少数顶级CA颁发了根证书。您可以通过点击浏览器的菜单来检查其中几个证书。

2.4对等认证

对等体的身份验证通过RFC 3280中定义的公共密钥路径验证完成。这基本上意味着以下内容:

  • 证书链中的每个证书都由上一个证书颁发。

  • 证书属性是有效的。

  • 根证书是存在于对等方保存的受信任证书数据库中的受信任证书。

服务器总是发送证书链作为TLS握手的一部分,但是客户端只在服务器请求时发送一个证书链。如果客户端没有适当的证书,则可以向服务器发送“空”证书。

客户端可以选择接受一些路径评估错误,例如,Web浏览器可以询问用户是否接受未知的CA根证书。但是,如果服务器请求证书,则不会接受任何路径验证错误。如果服务器要接受或拒绝“空”证书作为对证书请求的响应,则可以配置该证书。

2.5 TLS会话

TLS RFC:“TLS会话是客户机和服务器之间的关联。会话由握手协议创建。会话定义一组加密安全参数,可以在多个连接之间共享。会话用于避免对每个连接的新安全参数进行昂贵的协商。“

会话数据默认由SSL应用程序保存在内存存储中,因此会话数据在应用程序重新启动或接管时丢失。如果需要持久数据存储,用户可以定义自己的回调模块来处理会话数据存储。出于安全原因,会话数据保存24小时后也将失效。可以配置要保存会话数据的时间量。

默认情况下,SSL客户端尝试重用可用会话,默认情况下,当客户端请求时,SSL服务器同意重用会话。