降低风险:认真考虑你的证书业务至关重要
发布日期:2018-03-06你的全部设备和网络的安全性都与你的PKI设计和证书策略有关。就像你用抗震的地基建造房屋,或者确保你的屋顶能承受飓风一样,你应该好好设计和部署你的PKI,以抵抗常见的威胁。
当你开发和设计你的产品或软件时,你需要预先做出许多决策。在你的PKI中实施正确的安全措施的确需要你付出很多努力,但是做好适当的准备将有助于你减轻未来的安全风险。
请考虑一下:如果你的网络上有一份证书遭遇了攻击,那么这对你的安全会造成什么风险?该证书是否可以用于登录服务器的认证?它是否可能被用于针对你的客户的一个“中间人”攻击?
在开发那些使用证书进行认证或安全连接的应用程序或设备时,就需要认真考虑这些问题了。你需要针对你的产品如何处理证书以及你如何设计和管理你的PKI做出技术决策。
这篇博客面向的是那些与私人信任的客户端或设备证书打交道的开发人员和制造商,比如那些在软件应用程序或物联网(IoT)设备中使用的客户端或设备证书。
为持久的安全设计一个PKI
我们经常与那些不了解自己在设计PKI和证书策略的时候有哪些选择的开发人员讨论问题。使用私人信任PKI的情况下,你的客户端和设备证书都会有很强的灵活性,这样能增强你的软件或设备的安全性。
在这里,我们将深入讨论增强PKI的三个重要的注意事项:(1)决定证书有效期及其替代品,(2)保护私钥,(3)使用证书撤销机制——以及如何正确使用这些方法来降低风险。
证书提供了加密方法和身份验证,但事情并不仅仅是部署证书然后在某一天调用它那样简单。这两种属性都可以被攻击,但也可以通过适当的措施来加强安全性。
创建一个较低标准的PKI,从而永远不用操心管理证书的事情,这样做似乎是最简单的,但是这可能会使你遭遇到你未曾考虑过的安全问题。
让我们以最近的弃用SHA-1为例。SHA-1散列算法旨在为唯一识别证书提供加密签名,这一算法被研究人员认为是很弱的。去年,谷歌展示了一次实际的碰撞实验——两个不同的文件具有相同的散列值。
这次碰撞成为了SHA-1算法棺材上的最后一颗钉子,为了保持安全性,许多证书被新的SHA-2算法所取代。其中包括许多已存在了很久的证书,每过一年,这些证书都将变得更加脆弱(计算能力的增强会使它们更容易被破解)。在今天,一次SHA-1碰撞看起来似乎不太可能发生,但是5年以后呢?20年以后呢?如果你的产品将在未来使用很长时间,那么这些都是很重要的考虑因素。
这个简单的例子很快揭示了PKI安全的多面性。为了降低一种已被破解的散列算法的安全风险,你需要一种方法来重新颁发和替换你的设备上的证书,你还需要一种撤销机制来处理你所知道的受影响的证书,并且,你还应该对你的网络和用户抱有信心,相信他们不会再受到威胁。
证书有效性
在SSL/TLS方面,技术已被破解是一个不可回避的问题。协议所使用的核心加密技术其实已经到了退役的时候了——我们知道未来的更强大的计算机最终一定会破解目前的加密算法。
在过去的十年中,我们已经看到了重大的转变,这些转变包括从MD5和SHA-1散列算法以及1024位RSA密钥的转变。总有一天,我们需要替换2048位的密钥。针对这些变化做出规划将有助于避免很多麻烦。
在为你的证书选择有效期时,你需要在较长的证书有效期和由此带来的长期保护密钥的压力之间做出平衡。随着时间的推移,加密标准逐渐被削弱直至取代,而你的证书库也会变得越来越大,保护这些密钥将变得更加困难。最终,就像我们的SHA-1的例子一样,为了继续保证安全,一个算法被破解以后,可能会使我们需要紧急地更换证书。
关键在于,不仅要考虑你的证书的有效期,还要考虑替换它们的方法。我们已经发现,在大多数情况下,为了在设备的整个生命周期内只使用一个证书,人们在安全性方面做出了过多的妥协。
通过选择更长的证书有效期,你可以在更大范围内创建证书(以及这些证书的私钥),这些证书需要保持安全。这就增加了攻击者的目标数量,并且会刺激他们对证书发动更多攻击,这是因为,这样做使攻击者能够得到更长的访问时间。这反过来又增加了拥有一个证书撤销机制的重要性,并且证书撤销信息必须保留更长时间,这导致证书撤销文件变得更大,而网络变得更活跃。
但是,设计一个安全的PKI并不意味着你必须每年都更换证书。你可以对这些变化做出更有效的规划,同时继续使用长期有效的证书。更换和更新设备证书可以让你拥有最适合你的证书有效期,而不用担心出现替换它们的情况。
保护私钥
许多关于证书有效期的安全考虑的焦点都在于对密钥的攻击。如果攻击者可以窃取一个私钥,那么他们就可以模拟该设备、解密和读取数据,就可以通过这个网络的身份验证。
如果你想要提供有意义的身份验证和加密算法,那么你就必须保护密钥不被破解,而在它们被破解以后要及时撤销并替换它们。这意味着,你会希望在设备上以明文的形式存储密钥,否则这些密钥会很容易地被提取出来。相反,可以考虑一个软件解决方案,比如加密密钥存储库,或者以安全芯片(TPM)的形式提供硬件保护,这可以提供有意义的保护以防范攻击者。
即使你认为你已经充分保护了你的密钥,拥有一个可以正常运转的证书撤销机制也是至关重要的。如果攻击者意识到,当他们窃取密钥时,你没有任何可行的方法来阻止他们,那么,想方设法破坏你的安全措施就变得非常有吸引力了。撤销机制是一种附加的防御层,可以防范和制止攻击者。
这些防御是密切相关的。如果你的密钥很容易被破解,那么提供一个可靠的证书撤销机制——该机制可以处理大量的撤销请求——将会变得更重要,也更昂贵。
证书撤销
一些制造商和开发人员认为他们不能支持证书撤销,因为这是一种“高成本”的服务,需要活跃的互联网连接和很高的可用性。但事实并非如此。使用行业中的标准技术,你就可以在不连接CA服务器甚至完全不连接互联网的情况下检查证书撤销信息。
用于检查证书撤销信息的两个行业标准方法是:CRL(证书撤销列表)和OCSP(在线证书状态协议)。对于不熟悉这些机制的人来说,CRL就像是一个证书序列号的黑名单。通过OCSP,客户端可以在互联网上向一个中心服务器进行查询,以获取一个证书的撤销状态——就像是查询一个API一样。CRL和OCSP都是X.509证书协议的一部分。
CRL是两者之中相对简单的,具有一定的灵活性,在你的设备可能无法快速或可靠地连接到互联网的场景中,它仍然可用。传统上,颁发证书的机构每天都会签发一个CRL文件,客户端可以通过互联网检索到该文件。但是,在设备不太容易或不能正常地连接到互联网的情况下,CRL可以被存储和缓存。
与证书一样,CRL是被签发的,并且具有有效期。因为CRL是由证书颁发机构签发的,所以你可以信任它们。你所需要的并不是从证书颁发机构直接向设备签发CRL。相反,它们可以通过一个网络进行分发,这种网络可以是一个集中式的云服务器,也可以是内网。这比简单的黑名单或白名单更有优势。你可以从任何地方获得一个CRL文件,只要它的签名有效,就不必担心它被篡改。
CRL可以被缓存到设备上,一直被使用到有效期结束,该有效期可以被设置为几周或更长时间。对于那些无法持续可靠地接入互联网的设备来说,这一特点使得它成为一种很好的选项。在很多情况下,这使你可以从证书撤销检查中持续获益,而不必负担频繁获取最新信息的技术成本。
当设备没有接入互联网时,也可以使用OCSP,只要这些设备可以访问网关或服务器即可。“Stapling”是一个可选的OCSP功能,该功能允许证书撤销信息与TLS握手信息一起发送,这提高了网络性能。你可以同时部署OCSP和CRL,而以最近一次的CRL作为退路。
使用这些标准方法之一的优势就是,在你使用它们之前,可能已经有商业证书颁发机构支持它们了。作为开发成熟的标准,它们也拥有大量的可选项,以适应你的特殊需求。
结语
所有这些措施的目的都是限制和降低风险。受到良好保护的密钥对攻击者来说并不是一个有吸引力的目标——那些他们知道的可以迅速、轻易地撤销和替换的密钥也不是。
你的PKI设计和证书策略决策是相互关联的。想象一下这样的场景,假设你有一个响应极其迅速的撤销机制,但是私钥被以明文的形式存储在设备上。对这些密钥进行破解将不费吹灰之力,所以你需要在重新颁发证书时就对它们予以撤销。相反,如果你对你的私钥有很强的保护,但是没有有效的方法把已被破解的密钥标记为已撤销,那么你的系统也是不安全的。
构建一个兼顾你的产品的技术需求的强大PKI,可以为你的设备和网络打造一个坚实的安全基础。现在就简单地选择最宽松的策略可能会在今后产生严重的工程问题。