PKI,或公共密钥基础设施,是互联网上加密通讯的基础,是一个需要经过专门培训才能掌握的复杂领域。
公共密钥基础设施(PKI)有很多可变的部分,这意味着在管理PKI证书时犯错误的可能性是很大的。
公钥基础设施是大多数企业的加密部署的支柱。一个构建良好的PKI可以为你的企业处理一系列的职责,无论是认证、加密,还是确保文件和电子邮件的完整性。但是PKI是复杂的,任何公司或企业在管理PKI证书时都有可能犯一些常见的错误。
特别是如果企业的规模还不够大,无力聘请专家来管理它的PKI。
而且,即使企业有能力聘请一个专家(或者甚至是一个团队),也不能保证他们的方法是正确的。毕竟,PKI总是在不断发展,正如你所看到的,如果你不保持的技术前沿,你就将会犯一些非常严重的PKI证书管理错误。现在,我们将讨论一些常见的PKI证书管理错误,以及你的公司可以做些什么来避免这些错误。
让我们先快速回顾一下公共密钥基础设施
公共密钥基础设施,或者PKI,乍一看似乎是一个很难理解的概念,但是一旦你把它弄清楚了,这一切都是有意义的。PKI包括两方面:数字证书和公有/私有密钥对。
为了讨论这个问题,我将简化一些事情,但是首先让我们从根证书开始。根证书位于PKI的核心。这些数字证书是普遍可信的,每个用户的计算机系统的根存储中都保存了一个数字证书副本。根证书颁发机构,即拥有这些可信根之一的CA,可以从这些根中签发证书。
当我们说颁发证书时,我们所意味的是,将证书签发请求提交给CA,然后CA会使用它的根的私钥来对证书进行数字签名。或者至少从理论上讲,这就是它的工作原理。事实上,根被破坏的威胁是如此的严重,以至于CA构建出了中间根。中间根是由可信根签署的,它授予了它受信任的状态,尽管它不是根存储的一部分。然后CA就可以颁发证书了,方法是使用中间根的私钥来签署终端用户或子证书。
还有一件事,可能存在多个中间产物。有时,CA会为自己创造出一个中间产物,或者它可以向子CA签发另一个中间根,以供子CA从中进行签发。所有这些都创建出了一个叫做中间链的东西。当将子证书发送到客户端时,客户端会查看证书上的数字签名,并跟随这条链追溯到私有密钥所签署的证书。它会继续读取签名并跟踪链,直到它遇到了它的信任存储区中的一个根。只要可以将子证书链接回可信的根,它就会受到信任。如果不能,客户的浏览器就会发出错误警告。
我刚才所描述的,从根CA一直到子证书,都是公共密钥基础设施的组成部分。在SSL/TLS环境中,当部署正确时,任何客户端都可以使用公开可用的密钥来验证与之关联的端点,并安全地发送一个对称的会话密钥来用于通信。
简单来说,这就是PKI。
一些常见的PKI证书管理错误
现在让我们来讨论一下,我们所看到的一些最常见的PKI证书管理错误。我们与企业客户、大公司和中小型企业都合作过。他们中的所有都有不同的需求和痛点,但是也有一些共同的问题,几乎每个人都遇到了。
虽然本文所例举的还远远不够全面,但是希望它们能帮助纠正当前你的企业中的所有PKI证书管理错误,以免除你的PKI部署困扰。
1. 在创建PKI上花费了太多的时间
开始创建PKI时,假设你想要自己完成这个任务,你就会想要把所有的东西都制定好。现实是,对于IT人员来说,绘制所有这些方框和线条可能是很有趣的。这种奇怪的方式几乎是性感的,只有真正懂得系统架构的人才能体会得到。不幸的是, 我们看到,最常见的一种PKI证书管理错误是,这是一个太容易被其他事物分心的东西——担心你的离线根的层次结构、政策/中间CA、在线签发CA等。
是的,如果你计划构建属于你自己的PKI,你就需要先建立一个真正的离线根CA,创建出几个从中进行签发的中间根,而且你也将需要使用坚实的硬件安全模块(HSM)来保护它们。但是,还有很多其他你也需要担心的事情。这些同样也很重要。我们马上就会讲到。
但首先,当绘制所有这些的时候,你可能会把所有东西都变得太复杂。这只会让你无比头疼,因为它最终会变得更昂贵,也更复杂。理想情况下,管理良好的PKI会节省你的时间和压力——而不是浪费你的时间,增加你的压力。
2. 没有在其他配置细节上花费足够多的时间
虽然在CA层次结构上很容易花费太多的时间,但是我们看到,另一个最常见的PKI证书管理错误是,没有在其他配置细节上花费足够的时间。这是一个错误,因为在设置阶段未能做出正确的决定意味着,如果你以后想要改变什么的话,你必须完全重新部署所有东西。
你可能从来没有考虑过证书安全策略的构成部分,你可能甚至不知道什么是证书安全策略,但是这绝对不应该成为阻止你定义一个的理由。例如,当你利用一个商业CA来签发SSL证书时,你不必担心证书撤销列表(CA会负责处理这一事宜),但是如果你正在创建你自己的PKI,那么责任就落在了你身上。你是否需要在内部设置一个或两个OSCP(在线证书状态协议)服务器?你需要一个用于外部使用吗?
正如认证安全解决方案(Certified Security Solutions )首席技术官Ted Shorter所指出的:
“PKI在政策和实践定义方面拥有良好定义的结构,形式为证书策略(CP)和认证实践语句(CPS)。对于定义治理PKI的不同需求来说,这些都是绝佳的框架,也能帮助实现这些需求。创建这些文档可能是一项艰巨的任务。然而,重要的是要注意,仅仅复制别人的CP/CPS文档集是不够的;这些工具只有在真正展现了你的企业的PKI需求和操作过程时才有价值。”
让我们来看一些更多的、配置样式的PKI证书管理错误…
3. 使用了过时的算法、密码和协议
从全局来看,PKI应当有两个关键的属性:可伸缩性和长期生存能力。要想获取这两点,就需要选择正确的配置。选择密码和协议,也许没有什么比这更重要的了。公钥密码学是不断发展的,算法来了又去,密码不断变化——如果一不小心,你的整个PKI在实施了它之后的几年内就会过时。
这就是为什么进行研究并选择正确的算法和密码是非常重要的。以下是几个例子:
- 2015年,SHA-1遭到了弃用,我们现在使用的是SHA-2。如果你在2014年创建自己的PKI时选择的是SHA-1,那么你现在就有麻烦了。
- 8月,IETF正式发布了TLS 1.3协议(RFC 8446)。这代表了TLS协议最新、最安全的版本。SSL 2.0、3.0和TLS 1.0应当永远禁用。TLS 1.1也是不明智的。
- 很快,该行业就将决定是否继续使用RSA非对称加密仍然比使用椭圆曲线加密技术更有效。
自1994年Netscape创建HTTPS以来,密码学发生了大量变化。HTTPS从SSL(安全套接层)协议开始加密通信。然而,协议中的漏洞和缺陷促使行业不得不采用更安全的东西,在HTTPS得到广泛采用之后,我们开始从SSL迁移到TLS(传输层安全)。从那时起,TLS协议便经过了几次迭代,从1.0版到1.3版。
这并不是HTTPS自创建以来在安全方面所做的唯一改变。在过去六年时间中,几乎所有用来保护HTTPS传输的协议或系统都遭到了破坏或已经过时。以下是关于这些协议的一些最佳实践:
从SSL迁移到TLS 1.1或更高版本
- 摒弃RC4,使用更为安全的算法
- 使用SHA-2
- 使用了太短的密钥
在PKI中,密钥是用来加密和解密信息的,因此入侵者便不能盗取双方之间传输的数据。PKI是非对称的加密,这意味着有公有密钥和私有密钥,并且由一个密钥加密的内容必须由另一个密钥解密。这一设置能够有效保护信息不被窥探。也就是说,只要恶意用户无法获取私有密钥,一切就是安全的。
黑客获取私有密钥有两种方式:窃取它(我们将在稍后进行讨论),以及猜测它。因为这些密钥只是一些数学算法,所以拥有足够多硬件的黑客反向算法并决定基本值是可行的。这并不容易,但有时是可能的。
猜测(即破解)给定私有密钥的困难程度取决于密钥有多长,以及需要多少位来存储这一密钥。密钥越长、越复杂,它就越难被破解。问题在于,随着技术和方法不断改进,猜测私有密钥会变得越来越容易,因此便需要增加密钥的大小和复杂性以维护它的安全。
2002年,1024位密钥是维护安全的绝对最小值。不到十年的时间,这一最小值就已经不够了。2048位密钥现在成为了标准,但是至少到2030年,它也将被摒弃。如果您使用的是1024位的加密密钥,您的PKI就是十分脆弱的,因此您需要快速进行更新。
5. 选择了错误的密钥大小
在PKI中密钥是至关重要的——这甚至体现在了它的名字中。密钥可用于加密和解密数据,并且它们需要足够坚固,因此便没有人能够猜出它们的值、复制它们或解密你的加密。PKI特指非对称加密(尽管对称加密也起到了一定的作用)。
密钥的强度,或它的难解性,取决于它的长度。密钥越长,它就越安全。例如,一个标准的RSA私钥的长度是2048位。早在2002年,1024位的密钥就足够了,但今天它不再足够。再过10年,2048位的密钥可能也会过时。当事情开始变得棘手的时候,这又回到了我们之前的观点,即随着非对称密钥变得更长,它所需的处理能力就会以惊人的速率增长,远超过实际的密钥强度。最终,我们将不得不转换算法,因为RSA将变得十分笨拙。
这是需要考虑的问题,真正需要进行考虑的问题。
最终,在做出最终决定之前,你必须权衡你的安全需求和性能成本,并考虑所有法规或遵从性需求。
6. 没有预料到PKI会增加你的网络流量
无论你如何配置PKI,它都会增加你的网络负载的流量。PKI证书管理中最容易犯的错误之一就是,忘记了考虑PKI将会对你的企业网络产生的影响。到底有多少影响取决于你的架构选择。同样,这是你在一开始就想要弄明白的东西,而不是在最终实施它的时候。
额外的流量可能来自以下地方:
1)证书签发
在查询用户的详细信息和响应时,以及在向CA发出任何证书请求时所需的带宽,你都必须考虑目录或数据库请求。显然,这种流量将在证书签发首次推出时达到峰值,并且任何时候你需要进行续订或大规模重新签发。
2)电子邮件的使用
PKI的另一个应用是电子邮件和文档签名。如果你决定使用这种功能部署PKI,那么在发送已签名的或加密的电子邮件时,你就可能会依赖额外的流量。这些邮件不仅需要更多的带宽来发送,而且它们还需要一个目录查找。
3)证书撤销列表
正如我们之前提到的:如果你已经创建了属于你自己的CA,那么你就需要维护你自己的CRL。你的PKI越大,你的CRL就会增长的越快。如果每个用户都必须定期下载整个CRL,那么这不仅会增加流量,也会增加验证所需的时间。当然,这可以通过使用OCSP来消除。
4)目录复制
根据你存储证书的方式的不同,你可能还会看到一些额外的流量。如果你正在使用LDAP(轻量级目录访问协议)目录,在较大型的部署中,这些目录将通过网络进行复制。虽然LDAP是为快速、廉价的查找和复制以及正确地配置它而设计和优化的—并使它能很好地与现有的网络安全策略结合在一起——是一项具有挑战性的任务。
7. 没有安全地存储证书和密钥
让我们来讨论另一种常见的PKI证书管理错误:不正确地存储密钥和证书。一直以来,我们就在谈论密钥安全性的重要性。这是有充分理由的,因为密钥泄露会给企业造成伤害。
Bruce Schneier是一名备受尊敬的译码者和安全研究员,他写道,安全性如此重要,以至于一旦你有一点做得不好的地方,你都会觉得有点内疚:
“在任何基于CA的系统中,最大的风险之一是你自己的私人签名密钥。你是如何保护它的?几乎可以肯定的是,你没有一个安全的计算系统,而这个系统包含多种保护措施,比如物理访问控制、屏蔽设备、“空气墙”网络安全等;你将你的私钥储存在一台传统的电脑上。在那里,它容易受到病毒和其他恶意程序的攻击。即使你的私人密钥在你的电脑上是安全的,但你的电脑是不是锁在了一个房间,并且这个房间拥有视频监控,所以你就能知道只有你才使用过它?如果它受到了密码保护,要猜出密码有多难?如果你的密钥存储了在智能卡上,那么智能卡的抗攻击能力如何?(大多数都是十分弱的)。如果它存储在了一个真正能够抵抗攻击的设备上,受到感染的驱动计算机会让一个值得信赖的设备签署一些你不想签署的东西吗?
尽管这可能会使事情变得极端,但是如果你把密钥串保存在了电子表格中,放在了拇指驱动器或普通硬盘上,或者甚至是某个远程可在线进行访问的地方,你就犯了一个错误。坦率地说,你可能应当使用HSM。
但是,如果做不到这一点,至少要确保你已经充分锁定了正在使用的数据库或目录。将密钥存储库的访问权限制在少数几个高级人员也是一个好主意。
8. 糟糕的证书生命周期选择
这不仅仅是决定证书何时到期的事情——尽管这是很大的一部分。如果你在自己的网络上使用自己的私有CA,那么无论证书的生命周期有多长,你都可以根据自己的意愿签发证书。
周期较长的证书不需要频繁地更换,但是随着新的算法和密码的出现,它们最终可能会过时。
周期较短的证书需要更频繁地更换,如果你使用了自动化,这不会成为一个问题,但正如我们稍后会讨论的,更快的密钥轮换对安全性来说是一个很好的选择。
确定什么对你的企业和它的PKI是最好的,这需要你自己来完成,但是你需要制定一个完整的计划——一个签发流程——这不仅包括首次部署,还包括整个证书生命周期。
弄清楚如何处理撤销、密钥存档、密钥恢复以及其他突发事件,这同样也是一个好主意。
9. 没有频繁的轮换密钥和PKI证书
正如我们刚刚提到的,定期轮换证书和密钥是很好的。你的企业的签发和生命周期政策是多久,但最好是定期进行——每六个月或以下进行一次被认为是最好的。如果你的PKI包含了你自己的私有CA,那么除了带宽,签发这些证书什么都不需要。
正如安全研究员Scott Helme建议的那样,不要等到过期了才转换密钥:
“对于39个月,甚至825天的证书,我们实际上看到的是,在这些期限之后才更换密钥,而不是在此期限内。这是糟糕的习惯,因为给定加密密钥的使用时间越长,它就越有可能遭到攻击,我更愿意看到尽可能地采用短期内快速变化的密钥,而不是静态密钥。”
“短暂”是表示“会话”密钥的一种花哨说法。无论如何,通过定期置换证书和密钥,你就可以最小化风险。即使有某种形式的攻击,证书和密钥也会在几周内被淘汰。
10. 错误使用了自签名证书
通常,密钥和证书(可以证明网站身份,而不是黑客伪装的系统的数字标识符,)是从值得信赖的、名为证书机构(CA)的第三方那里获取的。然而,有时,企业可能也会签发属于自己的密钥和证书。
对于拥有自己的私有CA和大型PKI的大型企业来说,使用自签名证书是很常见的。在你自己的网络中,你可以手动将正确的根添加到企业的信任存储中,并且这些自签名证书也能良好运行(它们也适用于测试环境)。然而,当这些证书和密钥在外部使用并提供给最终用户时,就会出现问题。一旦它们在市场上流通并用于常规使用,由于一些原因,它们就会被证明是十分危险的。
首先,测试证书通常不像CA颁发的证书那样坚固(请参阅前面关于密钥长度的部分),这使得它们容易被破解和伪造。其次,它们通常也不会得到安全存储(稍后会详细介绍)。第三,因为它们是自签名的,所以当您想要解决PKI安全问题时,是很难在事后发现它们的,从而使得漏洞会潜伏在您的盲点之中。
至少对于面向公众的属性,使用可信的CA。
11. 缺乏自动化
一旦企业达到一定的规模,自动化几乎就是必需的,但即使你不认为自己足够大,这仍然是一个值得探索的选项。与任何形式的自动化一样,对PKI进行自动化能够提高效率,减少人为错误的可能性。自动化有助于证书和密钥的续订。它还可以跟踪和存储与证书和密钥相关的数据,比如:
- 已经颁发了多少证书?
- 这些证书是做什么用的?
- 我们现在有多少密钥?
- 是谁申请了这些密钥?
- 谁能访问它们?
最重要的是,自动化限制了人员与密钥和证书实际交互的次数,从而降低了人为错误。问题是,很少有企业会在其PKI管理中使用自动化。这可能是因为他们不知道自动化是什么,或者它能用来做什么,或者因为他们不认为它是必要的。备用选项是让人来运行系统,然而这往往会导致不安全和不可靠的实践。
12. 缺乏可视性
我们将讨论的最后一个PKI证书管理错误也同样是最危险的一个:缺乏对你的PKI的可见性。具体来说,就是你的子证书。你需要能够看到,所有你已经签发了的证书,它们是由谁签发的,以及它们会在什么时候过期——你需要一个完整的存货核算。
这确实是防止流氓证书的惟一方法——已被破坏的有效证书。如果证书中包含了你的某个域名的名称,攻击者就可能会模仿你的企业并造成各种危害。这里的重点并不是要深入到流氓证书的问题上,而是要巩固我们的观点,即需要在整个PKI上具有可见性。这是恰当地管理证书所需的一项功能。
幸运的是,有很多很棒的工具可以帮助你进行证书管理,它们既来自于诸如Comodo和DigiCert等的证书权威机构,也来自于诸如Venafi等的世界级的第三方安全公司。什么对你和你的企业最有效取决于你自己的个人情况,但在一定的企业规模内,如果没有采用某种管理工具,你就会失职——即使你自己建立它——因为这些管理工具能够让你拥有可视性,控制你的整体PKI。
避免最常见的PKI证书管理错误
设计公钥基础设施有点像建造一座房子——如果您想让它在结构上合理、可靠,您就需要对它进行规划,并遵守条例。正如我们之前所讨论的,在设置你的企业的PKI时,你可能总是会犯一些潜在的PKI证书管理错误,但如果我可以,或许可以囊括所有这些的最好的建议只有四个字:
不要着急
当你为你的企业部署PKI时,慢慢来,不要着急。在制定正确的政策和选择正确的配置方面做必要的研究。确保与任何将要成为利益相关者的人进行协商,尝试预测这是否会与其他网络安全策略发生冲突。
慢慢来。
不要害怕寻求帮助,因为这是很复杂的,有时甚至专家也需要专家。最好能找到恰当的人来进行恰当的部署——一个可以进行扩展并保持长期可行性的部署——而不是试图在本地完成所有工作并把它搞得一团糟。从长远来看,这只会让你付出得更多。