引言

使用 SSL 加密技术保护越来越多的网络流量意味着越来越多的服务和用例需要获得适当证书的解决方案。 无论是公共网站、内部网络流量,还是 web 应用程序的临时服务器,您都需要一个证书来保护您的数据并满足用户的现代安全期望。

Ssl 连接的主要好处围绕着隐私性和数据完整性。 连接是私有的,因为加密防止了窃听。 通过加密验证您正在连接到正确的服务器(而不是冒名顶替者) ,以及验证单个消息在传输过程中没有被篡改,可以确保数据完整性。

有几种不同的方法可以获得 SSL 证书,根据您的预算、受众和其他一些因素,您可以在商业证书颁发机构、新的自动化和免费证书颁发机构、自签名证书和您自己的私有证书颁发机构之间进行选择。 让我们对这些选项进行比较,并讨论何时使用它们可能是最佳选择。

词汇表

在我们开始之前,我们将定义一些在讨论 SSL 安全性时使用的常用术语:

传输层安全性(TLS)

传输层安全是一个新的安全协议,它取代了传输层安全安全协议。 虽然现代的加密连接更有可能使用 TLS,但 SSL 名称在流行语言中仍然存在,我们将在这里使用它。

证明书

在本文中,我们将专门引用 SSL 服务器证书。 每当请求新的 SSL 连接时,web 服务器就会显示服务器证书。 它们包含发出证书的主机的名称(应该与您要连接的服务器匹配) ,并由证书颁发机构签名以建立信任。

证书颁发机构(CA)

证书授权机构验证域所有者对 SSL 证书的请求的详细信息,然后——如果一切都检查完毕——颁发并签署服务器证书。 浏览器和操作系统维护受信任证书权威的列表。 如果服务器证书是由这些受信任的 ca 之一签名的,那么它也是受信任的。

域验证(DV)

域验证证书将颁发给已经证明他们控制了证书所请求的域名的人。 此证明通常采取从您的 web 服务器或 DNS 记录中提供唯一令牌的形式,CA 在颁发证书之前将检查这些令牌。

机构验证

经过组织验证的证书意味着证书颁发机构还要在公共数据库中验证公司名称和地址。 此信息将放入证书中,通常只有当用户单击绿色挂锁图标进行进一步调查时才会显示此信息。

扩展验证(EV)

扩展验证比域或组织验证更彻底。 在签发 EV 证书之前,不仅要检查域所有权,还要核实请求证书的法律实体的存在和位置,以及该实体控制被验证的域。

与 DV 和 OV 证书不同,EV 不能作为通配符证书颁发。

Ev 证书在 web 浏览器中也得到了特殊的处理。 浏览器通常用绿色挂锁图标表示 DV 证书,而 EV 证书也会显示一个更大的绿色条,其中包含发放证书的组织的名称。 这是为了减少钓鱼攻击,虽然一些研究表明,用户往往不会注意到时,绿色栏丢失。

通配证证书

通配符证书不是针对特定的完全限定的域名(例如 app.example.com)颁发的,而是对所有子域名都有效。 因此,发给 * . example. com 的证书将覆盖 example. com 的任何子域名,如 app.example. com 和 database.example.com。 星号字符是通配符,可以用任何有效的主机名替换。

证书吊销列表

证书可以包含如何访问证书吊销列表 / 服务器的信息。 客户端将下载并检查此列表,以确保证书没有被撤销。 基本上已经被 OCSP 应答者所取代。

Online Certificate Status Protocol (OCSP)

Ocsp 协议取代了 crl,具有实时性更强、带宽要求更低的优点。 一般操作类似: 客户端查询 OCSP 响应器,以检查证书是否已被撤销。

商业认证机构

商业证书授权机构允许您购买 DV、 OV 和 EV 证书。 有些提供免费的 Domain Validated 证书,但有一定的限制(例如,没有通配符)。

  • 过程: 初始设置和更新的手工过程
  • 费用: 大约10-1000美元
  • 验证: DV、 OV 和 EV
  • 信任: 在大多数浏览器和操作系统中默认是受信任的
  • 通配符证书: 是的
  • 只支持 IP 的证书: 有些会为公共 IP 地址颁发证书
  • 有效期: 1-3年

在大多数浏览器中,默认情况下大多数商业证书授权机构都是受信任的。 更新的过程通常是手动的,因此您必须注意证书的有效期,并提醒自己按时更新。

传统上,商用 ca 是获得大多数主要浏览器信任的证书的唯一实际选择。 通过新的自动化证书颁发机构(如 Let’s Encrypt) ,这已经改变了。 不过,商业 ca 是获得 EV 证书的唯一途径,也是获得大多数浏览器自动信任的通配符证书的唯一途径。 如果您需要为无法运行自动化的 Let’s Encrypt 客户机的设备提供证书(由于软件不兼容,或者可能是低功耗的嵌入式设备) ,那么它们也是一个很好的选择。

商业证书颁发机构通常提供额外的支持合同、担保和认证选项,这对某些公司和行业很重要。

让我们加密吧

Let’s Encrypt 提供了一个自动化机制来请求和更新免费的域验证证书。 他们已经创建了一个标准协议—— ACME ——用于与服务进行交互以自动检索和更新证书。 Acme 的官方客户名为 Certbot,尽管存在许多替代客户。

  • 过程: 初始设置和更新是自动化的。 只有 Apache 和 Nginx 的设置是通过官方客户机自动完成的,但是证书可以下载和使用,不依赖于任何特定的服务器软件。
  • 费用: 免费
  • 验证: DV 专用
  • 缺省值: 在大多数浏览器和操作系统中缺省值得信任
  • 通配符证书: 无(计划于2018年1月)
  • 只适用于 ip 证书: 不适用
  • 保质期: 90天

Let’s Encrypt 证书的寿命很短,可以鼓励自动更新,并减少攻击者滥用任何受损证书的时间。

如果您有一个可公开访问的服务器,并且有一个指向它的有效域名,那么 Let’s Encrypt 可能是一个很好的选择。 让我们加密的服务器需要联系你的网络服务器或者获取一个公共 DNS 记录来验证你是否控制了域名,所以在你的本地网络防火墙后面的私人服务器上使用它可能会有点棘手。 不过,使用 Let’s Encrypt 的基于 dns 的授权挑战仍然是可能的。

Let’s Encrypt 将不会为单独的 IP 地址提供证书。

如果您需要 EV 证书或通配符证书,那么 Let’s Encrypt 不是一个选项。 请注意,Let’s Encrypt 可以创建一个包含多达100个主机名的证书,因此您可能并不真正需要用于用例的通配符,您可能只需要一个涵盖所有现有子域的证书。

不过,由于 Let’s Encrypt API 的速率限制,如果您有许多可以动态创建的子域或动态子域,那么 Let’s Encrypt 可能不适合。

自签证明书

可以使用由自己的私钥签名的 SSL 证书,完全不需要证书颁发机构。 这就是所谓的自签名证书,通常建议在设置 web 应用程序进行测试或者为数量有限的精通技术的用户使用时使用。

  • 过程: 手动创建证书,没有更新机制
  • 费用: 免费
  • 验证: DV 和 OV
  • 信任: 默认情况下为无。由于不涉及公共 CA,每个证书必须手动标记为受信任的
  • 通配符证书: 是的
  • 只支持 IP 的证书: 是的,任何 IP
  • 有效期: 任何

可以使用 OpenSSL 库附带的 OpenSSL 命令生成自签名证书。 您可以在我们的教程 OpenSSL 精华: 使用 SSL 证书、私钥和 csr 中找到所需的准确命令,以及 OpenSSL 的更多背景知识。

因为自签名证书不是由任何受信任的 CA 签名的,所以您需要手动将证书标记为受信任的,这个过程在每个浏览器和操作系统中都是不同的。 此后,该证书将作为任何正常的 ca 签署的证书。

如果您只需要手动管理少数客户机上的信任,并且不介意如果不进行更多的手动操作就不能撤销或更新自签名证书,那么自签名证书可以用于一次性使用。 对于开发和测试目的,或者对于只有少数人会使用的自托管 web 应用程序来说,这已经足够好了。

私人证书授权机构

您可以创建自己的私有证书颁发机构,并使用它来签署证书。 您的用户需要手动安装并信任您的私有 CA,然后才能信任它的任何证书。

  • 过程: 手动创建和更新证书,加上 CA 本身的手动设置
  • 费用: 免费
  • 验证: DV 和 OV
  • 信任: 默认为“无”。您必须手动将您的私有 CA 证书分发给客户端以建立信任
  • 通配符证书: 是的
  • 只支持 IP 的证书: 是的,任何 IP
  • 有效期: 任何

与自签名证书一样,您可以使用 OpenSSL 库附带的命令行工具创建一个私有 CA,但是已经开发了一些替代接口来简化这个过程。 Tinyca 是这个过程的图形界面,caman 是命令行程序。 这两种方法都使得创建 CA 以及颁发、更新和撤销证书变得更加容易。

如果您有多个证书可以创建,并且可以手动为用户分发和安装您的 CA,那么私有 CA 是一个很好的选择。 这可能限制了您在组织内部使用 CA,或者限制了一小群能够正确安装 CA 的技术熟练用户的使用。 较大的 IT 部门通常有办法将 ca 自动部署到用户,这使得这种解决方案对用户更具吸引力。

与自签名证书(其中每个证书都必须手动标记为受信任证书)不同,您只需安装一次私有 CA。 然后,从该 CA 发出的所有证书都将继承该信任。

缺点之一是运行 CA 会有一些开销,需要一些知识来以安全的方式设置和维护。

如果适当的吊销对你的使用很重要,你还需要为证书吊销列表服务器维护一个 HTTP 服务器,或者一个 OCSP 响应器。

总结

我们已经回顾了获取或创建 SSL 证书的一些不同选项。 无论哪种方式最适合您的情况,向其添加 SSL 保护都有利于保护您的服务和用户的数据、隐私和安全性。

如果你想深入了解 SSL 和我们讨论过的选项,下面的链接可能会有所帮助:

  • Openssl 文档详细描述了该库及其命令
  • 证书发行机构/浏览器论坛认证中心是认证机构和浏览器供应商为 ca 的操作制定要求和最佳实践的地方。 这包括一些规则,比如证书的有效期应该是多长,以及是否应该为非公有域名颁发证书
  • Let’s Encrypt CA 有关 ACME 协议的更多信息