我的安全部门坚持要求我(系统管理员)在为我们的Web服务器续订SSL证书时创建一个新的私钥。他们声称这是最佳做法,但我的Google搜索尝试未能证实他们的主张。正确的方法是什么?

我找到的最接近的方法是:是否应该每年重新生成新的SSL私钥?,但这并不能真正解释为什么需要更改密钥。 />
我知道在我改变钥匙的时候没什么大不了的,但是我从来没有一个人在没有正当理由或解释的情况下做我被告知的事情:)

评论

就个人而言,我真的很惊讶CA甚至允许使用相同的密钥进行续签。

有趣的是,正如@Thomas Pornin在下面提到的那样,从安全的角度来看,即使情况相似,该安全部门也不会坚持每年为其SSH服务器生成新密钥。 ...这很不方便,因为它会破坏客户端的.ssh / known_hosts文件。

#1 楼

我要说的是,他们的建议不是一个很可靠的建议,除非您使用的密钥太小,否则您将遇到另一个问题。据估计,至少可以确保您安全到2020年,甚至更长。如果您使用的是1024位或更少的密钥,则说明您不符合标准,我建议立即更新为2048位。如果您当前使用的是1536位密钥,则应该安全一两年。

当然,从学术上来说这都是。某人一年内能够(或倾向于)破解您的1024位SSL密钥的可能性非常低。

正如您所链接的问题中提到的那样,有优点也有缺点。

优点


为攻击者减少破解密钥的时间。如果您仍在使用合理的密钥大小,那将是一个有争议的问题。
停止可能危害您私钥的不法分子。不太可能,但是未知。
让您有机会增加密钥大小,使其领先于曲线。除非您使用非常小的密钥,否则可以为您提供防止密钥破解的任何具体保护。
浏览器的SSL检查/ anti-MitM插件可能会警告用户密钥已更改。在我看来,这是一个薄弱的缺点-大多数用户不会使用此功能。
与更严格的HSTS政策和实施有关,可能会引起临时警告。您可能还会做其他事情。

因此,从两方面来说,都有一些薄弱的原因,并且可能需要考虑一些极端情况。只要您使用2048位或更高版本的键,我都会稍微倾向于“除非您需要”,否则不要倾斜。

最重要的是要问他们为什么他们认为有必要-可能是您有一个与基础架构相关的原因来更新我们不知道的密钥。如果他们不能提出一个可靠的论点(“为什么不正确”是不正确的),那么他们应该适当地重新评估他们的建议。

评论


为什么在证书中使用新密钥对比使用相同密钥进行更新需要更多的工作?

– CodesInChaos
13年1月10日在9:38

@CodesInChaos不需要,但是更新任何关联的客户端证书当然要花很多时间。如果我没记错的话,在不更改密钥的情况下更新服务器证书时,可以保留所有客户端证书。但是,如果您更改密钥,则也必须更新所有客户端证书。

–多项式
13年10月10日在10:03

另外,如果更改密钥,通常会需要完全重新启动Web服务器(请参阅Apache,但假设其他人也需要这样做),但是如果仅更改证书,则可以进行正常重启(无停机时间) 。当然,拥有高可用性环境可以缓解所有这些问题,但是...

–杰索拉
2013年1月10日12:57

@SteelCityHacker仅当您运行的网站每分钟具有数千次点击时,这才成为问题。在大多数情况下,您可能很不幸,由于重启太快,因此在Apache服务重启期间会收到一个请求。

–多项式
2013年1月10日13:14

重要的是要注意,静音失去控制权是另一种风险。您确定在过去几年中没有人以可能泄露密钥的方式对服务器进行了错误处理吗?没人在附近摆放一些副本吗?新证书,新密钥。不管密钥大小如何,重新启动时钟通常比有人将您的密钥分解为风险要重要得多。

– Jeff Ferland♦
13年10月10日在21:51

#2 楼

更改私钥不是最佳实践,而是一种广泛的实践。实际上,它与安全性几乎没有关系,而与通用CA处理证书更新的方式有很大关系,即,大多数时候,CA就像新证书一样,具有新的私钥生成。在CA方面,不做任何特殊的续订操作就比较简单。因此,就有了更改密钥的习惯。

从安全的角度来看,即使情况相似,相同的系统管理员也不会坚持每年为其SSH服务器生成新密钥。或者,更确切地说,更改SSH服务器密钥有点不方便,因为它破坏了客户端的.ssh/known_hosts文件。因此,习惯上避免更改SSH服务器密钥。因此,SSH服务器密钥是长期存在的。没有人真正跳过这一点。他们为什么要担心具有类似加密强度的SSL密钥?

最佳做法是,在技术进步使您的密钥有些脆弱时,考虑到普遍的偏执狂(通常称为“合规性”)来更改密钥原因”);因此,您应该考虑到现在,在2013年,应该用更长的密钥代替1024位RSA密钥,尽管我们仍然无法破解这样的密钥。如果您的RSA密钥是1536位或更宽,则没有密码理由要创建一个新密钥(但是再次,也许在CA端更方便地更改它)。

评论


续签CA证书(与创建新证书相比)会使路径构造或验证复杂化吗?

–半比特
2013年1月10日16:07

在这里,我们谈论的是服务器证书,即终端实体证书,而不是CA证书。在保持相同密钥的情况下更新CA证书的好处是可以立即将其应用于以前的CA证书颁发的证书,因此名义上是好的,并且可以使过渡更加顺畅。它的确使路径的构建更加复杂,但是实现通常可以毫无问题地解决它(但是确实使一些网络管理员感到困惑)。

–托马斯·波宁(Thomas Pornin)
2013年1月10日16:20

@ThomasPornin SSH完全具有前向秘密密钥交换,但SSL没有。您认为这种说法有什么不同吗?

–user12048
18年3月12日在18:27

@AlexWebr那应该没有什么不同。在现代网络中,可以窃听的攻击者也很容易发出MitM攻击,这使得前向保密的优势相当小。

–托马斯·波宁(Thomas Pornin)
18 Mar 12 '18 at 18:54

#3 楼

答案不是技术或加密,而是关于人的。有了工作变更(听不到心烦的管理员?),服务器迁移,灾难恢复测试,备份以及私钥之类的内容,可能会有所暴露。

鉴于上述情况,密钥更新是一种安全性最佳实践。

评论


这实际上是一个好点,没有其他任何答案。随着时间的流逝,很多人都可以使用该密钥,为什么不更改它呢?就像您在员工离职时更改门密码吗? (你这样做,对吗?)

–吕克
16年2月16日在20:11

#4 楼

不用担心有人将您的RSA密钥分解。对于州级对手来说,分解1024位RSA密钥可能是可能的,但是即使对他们来说,这可能也不划算。 2048位密钥分解可能要几十年才能实现。

我主要担心的是您的私钥在服务器漏洞中被盗。由于攻击者可能在您的服务器上存在持久性恶意软件,因此在过去的入侵中获得的收益还不清楚。因此,您需要重新安装服务器以保护新密钥。

另一个问题是,某些弱SSL套件(主要是基于RSA加密的家族)使用您的长期密钥来保密,并且不仅用于身份验证。有了这些妥协,您的服务器密钥便可以解密与使用这种弱套件的服务器之间过去的所有SSL通信。使用新密钥并安全删除旧密钥会限制此类攻击的影响。

因此,如果您的服务器仍启用了这些套件,则强烈建议您定期更改密钥。

评论


尽管我不会使用1024位RSA密钥,但这一点是正确的。真正的危险不是标准算法的加密弱点,而是可利用的软件漏洞和管理服务器的人员。

– Mike76
18-09-25在17:01

#5 楼


您在HeartBleed之后更改了密钥吗?
您的数据中心技术人员对坏硬盘有何作用?
去年有人离开了运营组织吗?
最后一次是什么时候您何时旋转管理员密码和ssh密钥?

所有这些问题都应该使您开始思考密钥的完整性。我并不是说它们很可能已受到损害,或者任何人都将能够滥用它们。我正在尝试让您考虑为什么要旋转它们。

旋转钥匙应该超级容易,并且是一种很好的安全卫生措施。如果您因为困难而没有这样做,那就是一个严重的问题。构建工具和流程以使其变得容易。如果不这样做,您最终将无法轮换更重要的事情。

#6 楼

您使用密钥的次数越多,给予攻击者的时间就越多。尽管当前的技术认为不可能打破2048位,但要格外谨慎,更换钥匙也不是一件坏事。

此外,有人可以设法获取您的私钥,而您却无法检测到它。如果他不能重复该动作,那么续约的好处就非常明显。

#7 楼

尽管我同意每次续签证书都不会产生新密钥的技术原因,但我不会立即向您的安全团队/经理提出挑战,并就此问题打电话给他们。

与产生新密钥同样有效的技术原因。例如,在大型组织中,IT集中化,技能,过程和良好实践的级别各不相同,因此集中化的安全管理区域可能需要此类实践来帮助减轻某些风险,这也可以帮助使过程变得越来越小可管理的。尽管从技术角度来看,更复杂的程序可能更正确,但它们更难以记录,并且使员工更难以知道他们正确地遵循了这些程序。如果这种做法不会产生大量开销,那么采用和维护更简单的“始终执行X”方法可能会更容易。

从另一个角度考虑它。您组织中负责管理证书的每个人是否都对您有相同的意识和了解,并且对它们的理解是否充分/专心?员工更替的水平是什么?在何种程度上需要关注前员工可能会访问的敏感数据的数量。

每当考虑安全性时,人为因素几乎是总是比技术方面重要或重要。政策和程序需要考虑人的因素,并试图确保这些政策和程序的结构能够帮助员工做正确的事情,即使他们可能不完全理解为什么需要这样做。 br />

#8 楼

SP 800-57第1部分已修订,密钥管理建议

NIST关于RSA密码周期的建议似乎为1-2年。

评论


以防万一将来的人,在第4版中,可以在第45页(或5.3.6节)中找到一个漂亮的表格,其中包含有关加密期限的各种信息

–DeadChex
20年1月13日在22:42

#9 楼

确实与更改密码相同。如果有人在更改密码时正在破解密码,则必须重新开始。或者,如果密码或私钥被窃取,则续订会使他们的失窃密钥失效(假设他们无法轻易再次窃取它)。

更改私钥可能是一个好习惯每年或每隔几年,以便您知道它在需要更改时不会损坏任何东西,但是对于证书本身的安全性而言,这不是必需的。

评论


不过,有理由不这样做。

–多项式
13年10月10日在8:49

#10 楼

一些人提出了这样一个事实,即很少旋转ssh主机密钥作为不旋转ssl密钥的理由。这似乎是另一个要解决的问题。 (我为一个稍微偏离主题的答案表示歉意,但这里有人提到它,因此似乎很合适)。

请参阅上面的答案,以了解为什么有人希望旋转键。

对于合规性需要旋转ssh主机密钥但担心可用性对最终用户造成影响的每个人,以下内容特别有用。

1)部署ssh_ca
(man ssh-keygen中非常完整的说明)

ssh-keygen -f ssh_ca -b 4096


2)将证书分发给用户:将证书授权行添加到〜/ .ssh / known_hosts

@cert-authority *.domain.name ssh-rsa AAAAB3[...]== Comment


3)签名主机密钥(确保将每个密钥限制为单个主机)

ssh-keygen -s ssh_ca -I host.domain.name -h -n host.domain.name -V +52w /etc/ssh/ssh_host_rsa_key.pub


4 )配置服务器以显示证书(/ etc / ssh / sshd_config):

HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub


客户端现在信任由CA签名的任何主机密钥(否第一次连接时更盲目地接受密钥信号)

现在可以滚动主机密钥了不会影响客户。密钥签名可以纳入主机构建/编排过程。

这是一个很好的参考。该项目围绕使用ssh_ca自动过期的用户访问权限创建了一些有用的工具。

评论


如果我理解正确,那么您正在旋转主机密钥,而不是CA ...?这到底是什么解决方案?

– N.I.
16 Dec 9'在9:04

这创建了一条信任链​​,用户不再需要盲目地信任新的主机密钥。在主机始终处于旋转状态的可能环境中,主机密钥验证是无用的,因为培训用户只是忽略警告。该解决方案允许配置管理器对新授权主机的密钥进行签名,从而允许用户信任由CA签名的密钥。恶意主机将发出可操作的警告。如果您需要更换CA或旋转密钥,则需要在每个客户端上更新签名CA的身份。 (也许与您的MDM)

–jorfus
19年8月8日在18:17