云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

消息队列_启东网站建设公司_价格

小七 141 0

如何构建自己的公钥基础设施

保护像CloudFlare这样地理位置多样化的网络的一个主要部分是在数据中心之间传输时保护数据。客户数据和日志对于保护很重要,但我们的应用程序用于彼此通信的所有控制数据也是如此。例如,我们的应用服务器需要与我们在日本大阪的新数据中心进行安全通信。克里斯克鲁格的CC BY-SA 2.0图像伟大的安全架构需要一个具有多层保护的防御系统。随着CloudFlare服务的增长,对应用程序到应用程序通信的安全需求也随之增长。因此,我们需要一种简单且可维护的方法来确保CloudFlare内部服务之间的所有通信都得到保护,因此我们基于已知且可靠的协议构建了一个。我们的信任系统基于使用内部托管证书颁发机构(CA)的公钥基础设施(PKI)。在这篇文章中,我们将描述我们如何构建我们的PKI,如何在内部使用它,以及如何使用我们的开源软件运行自己的PKI。这是一个很长的帖子,有很多信息,去喝杯咖啡吧!应用层保护大多数相当复杂的现代web服务不是由一个单一的应用程序组成的。为了处理复杂的操作,应用程序通常被拆分为多个"服务",这些"服务"处理业务逻辑或数据存储的不同部分。这些服务中的每一个都可能存在于不同的机器上,甚至存在于不同的数据中心中。大型服务提供商的软件栈由许多组件组成。对于CloudFlare,这包括一个处理用户操作的web应用程序、维护DNS记录和用户规则的主数据库、将这些规则分发到边缘网络的数据管道、缓存服务、日志传输管道、数据分析服务等等。一些服务到服务的通信可以在一台机器内进行,有些在数据中心内,有些则通过更广泛的网络(如因特网)进行。在我们不断发展的服务中,管理哪些通信应该使用哪种类型的网络并不是一项简单的任务。一次意外的配置更改可能会导致消息被认为永远不会通过Internet上不受信任的连接离开计算机。系统的设计应确保这些消息即使通过错误的网络也能安全。输入TLS减轻攻击者带来的风险的一种方法是加密和验证传输中的数据。我们的方法是要求所有新服务使用加密协议传输层安全(TLS),以保持服务间通信的保护。这是一个自然的选择:TLS是HTPS中的"S",是加密Web的基础。此外,现代web服务和api已经将TLS作为应用层加密的事实标准。它与RESTful服务无缝协作,在京都大亨、PostgreSQL和Go标准库中得到支持。正如我们在之前的博客文章中所描述的,未经验证的加密可以被路径攻击者挫败。没有身份验证的加密无法保护传输中的数据。为了保证连接的安全,每一方都需要向另一方证明自己的身份。公钥加密提供了许多信任机制,包括PGP的"信任网"和HTTPS的公钥基础设施(PKI)模型。我们选择PKI模型是因为它易于使用和部署。具有PKI的TLS提供了可信的通信。对你的PKI要挑剔信任是安全通信的基石。为了让双方安全地交换信息,他们需要知道另一方是合法的。PKI提供了一种在线信任身份的机制。实现这一点的工具是数字证书和公钥加密。证书允许网站或服务证明其身份。实际上,证书是一个文件,其中包含有关所有者的身份信息、公钥和来自证书颁发机构(CA)的签名。每个证书还包含一个公钥。每个公钥都有一个相关联的私钥,该私钥安全地保存在证书所有者的控制之下。私钥可用于创建可由关联公钥验证的数字签名。证书通常包含有关证书颁发给的组织的信息公钥有关颁发证书的组织的信息发行人授予的权利证书的有效期证书对哪些主机名有效允许的使用(客户端身份验证、服务器身份验证)由颁发者证书的私钥进行的数字签名证书是在线证明身份的有力工具。证书的所有者可以对数据进行数字签名,验证器可以使用证书中的公钥来验证它。证书本身是由第三方CA数字签名的这一事实意味着,如果验证者信任第三方,他们就可以保证证书是合法的。CA可以赋予证书特定的权限,例如证书的标识应该被信任的一段时间。有时证书是由所谓的中间CA签名的,中间CA本身是由另一个CA签名的。在这种情况下,证书验证器可以沿着链直到找到他们信任的证书-根。这种信任链模型对CA非常有用,它允许根证书的私钥保持脱机状态,并且只用于签署中间证书。中间CA证书的有效期可以更短,可以用于按需签名端点证书。寿命较短的在线中间人更容易管理和撤销,如果受到损害。这是web上用于HTTPS的相同系统。例如,cloudflare.com网站有一个由Comodo的中间证书签名的证书,该证书又由Comodo脱机根用户签名。浏览器信任Comodo根,因此也信任中间证书和网站证书。此模型适用于web,因为浏览器只信任一小部分证书颁发机构,每个机构都有严格的要求,只有在验证了网站的所有权后才能颁发证书。对于不能通过浏览器访问的内部服务,*不需要*通过第三方证书颁发机构。可信证书不必来自Globalsign、Comodo、Verisign或任何其他CA-它们可以来自您自己操作的CA。建立自己的CA获得一个网站的证书,最痛苦的部分就是要经历获得证书的过程。对于网站来说,我们通过发布通用SSL来消除这种痛苦。管理CA最痛苦的部分是管理。当我们决定建立我们的内部CA时,我们试图使获得证书和操作CA变得无痛甚至有趣。我们使用的软件是CFSSL,CloudFlare的开源PKI工具包。这个工具去年是开源的,拥有运行证书颁发机构所需的所有功能。尽管CFSSL是为内部CA构建的,但它足够健壮,可以使用公共信任的CA;事实上,Let's Encrypt项目正在使用CFSSL作为CA基础设施的核心部分。钥匙保护要运行CA,您需要CA证书和相应的私钥。这个私钥非常敏感。任何知道密钥值的人都可以充当CA并颁发证书。浏览器信任的证书颁发机构需要将其私钥保存在称为硬件安全模块(hsm)的专用硬件中。公司基础设施保护私钥的要求不一定那么严格,因此我们提供了几种保护密钥的机制。CFSSL支持三种不同的私钥保护模式:硬件安全模块(HSM)CFSSL允许CA服务器使用HSM来计算数字签名。大多数hsm使用一个名为PKCS#11的接口与它们交互,CFSSL本机支持这个接口。使用HSM可以确保私钥不会存储在内存中,并且它提供了针对物理对手的篡改保护。红色十月私钥可以使用Red十月加密(另一个开源CloudFlare项目)。受红色十月保护的密钥只能在多个密钥所有者的许可下解密。为了使用带有红色十月密钥的CFSSL,密钥所有者需要授权私钥的使用。这可以确保CA密钥在磁盘、源代码管理或配置管理中永远不会被解密。注意:CFSSL中的Red十月支持是实验性的,可能会发生变化。明文CFSSL接受纯未加密的私钥。当私钥在运行CFSSL的机器上或由另一个程序生成时,这种方法很好地工作。如果运行CA的计算机是高度安全的,则此模式是安全性、成本和可用性之间的折衷。这在开发模式中也很有用,允许用户测试对其基础结构设计的更改。接下来,我将向您展示如何使用明文私钥快速配置内部CA。注意:下面期望安装CFSSL。生成CA密钥和证书首先,您需要一些有关要在证书中包含哪些元数据的信息。首先创建一个名为csr的文件_ca.json文件包含以下基本信息(请填写您自己组织的详细信息):{"CN":"我的超级CA","键":{"algo":"rsa","尺寸":2048},"姓名":[{"C":"我们","L":"旧金山","O":"我最棒的公司","OU":"CA服务","ST":"加利福尼亚"}]}使用此功能,您可以通过一个调用创建CA"$cfssl gencert-initca csr_ca.json文件|cfssljson-裸ca这将生成启动CA所需的两个文件:加利福尼亚州-密钥.pem:您的私钥约pem:您的证书ca.csr公司:您的证书签名请求(需要让您的CA由另一个CA交叉签名)密钥和证书是开始运行CA所需的最低限度。政策一次t