跳转到内容

网络应用程序安全指南/SSL、TLS 和 HTTPS 基础

来自维基教科书,开放的书籍,为开放的世界

SSL、TLS 和 HTTPS 基础

SSL/TLS 为 HTTPS 提供加密和身份验证。 [1]

为了最大限度地提高安全性

  • 遵循 SSLLabs 最佳实践,包括
    • 确保禁用 SSLv2
    • 自己生成证书的私钥,不要让你的 CA 为你生成
    • 使用适当的密钥长度(通常在 2013 年为 2048 位)
    • 如果可能,禁用客户端发起的重新协商
    • 考虑手动限制/设置密码套件

基本原理

SSL 很容易做到,但很难做到正确。SSLLabs 提供了良好的指南,这些指南会在发现新的攻击时更新。

CA 无需知道你的私钥。根据所用密码套件的不同,私钥可以让攻击者解密被动窃听的通信。因此,即使你信任 CA,最好避免任何风险。生成一个密钥和一个 CSR,只向 CA 提供 CSR。

增加密钥长度会提高安全性,但也显著增加连接建立的 CPU 负载。对于在 2013 年之后过期的证书,Mozilla Firefox 将不再接受 1024 位密钥。2048 位密钥应该足以满足未来几年所有应用程序的需求 - 使用更大的密钥大小似乎是过犹不及。(所有信息基于 2013 年)。注意:连接建立的巨大 CPU 开销可被(D)DoS 攻击者利用。当支持客户端发起的重新协商时,此类 DDoS 攻击更难检测和防御。

SSL/TLS 支持大量“密码套件”,每个套件定义一组用于保护连接的加密机制。其中一些提供完美的前向保密,一些则没有。(完美的前向保密意味着,如果私钥落入攻击者手中,他无法解密在获得密钥之前窃听的数据)。通常,客户端(浏览器)和服务器通过首先交换双方支持的套件来选择一个密码套件,然后选择客户端的首选套件。根据设置的不同,服务器可以选择密码套件,忽略客户端的偏好。大多数默认设置都比较合理,但对于高速或高安全应用程序,你可能需要考虑将支持/首选的套件限制为高速或高安全套件。如果你想排除不支持足够安全性的客户端(例如,古老的“出口控制”有限客户端),确保禁用这些密码套件。在配置密码套件时,仔细检查设置以确保没有允许未对服务器进行身份验证的“ADH”套件!如果你不确定,请保留默认设置,并始终验证设置的效果!

  1. "关于 SSL/TLS". Instantssl.com. 检索于 2016-04-29.
华夏公益教科书