OpenSSL CA中何时需设unique_subject为yes?相关安全与场景疑问
默认情况下,OpenSSL CA的unique_subject参数被设为yes,这个设置会限制你不能签发多个拥有相同可分辨名称(distinguished name,DN)的证书。要是硬尝试签发,就会弹出错误提示:failed to update database TXT_DB error number 2。
不过实际场景里,确实有需要允许重复DN的情况——最常见的就是给依赖方签发有效期延长的证书。比如某个网站要在几个月后更新证书,要是不改这个设置,你就得先吊销旧证书,才能签发同DN的新证书。但有时候我们想给网站所有者留一段宽限期,让新旧证书同时生效,方便他们平滑过渡。当然也有人想到了变通办法:修改DN里和证书关联性不强的字段(比如OU)来绕开这个限制。
我查了OpenSSL官方文档里关于unique_subject的说明,里面提到默认设为yes只是为了兼容旧版本。文档还明确指出,为了简化CA的滚动更新操作,应该把这个值设为no。这让我觉得,设为no不仅完全可行,甚至才应该是更合理的默认值。
我找了不少关于这个属性的参考资料,大部分都建议把unique_subject设为no(需要同时修改openssl.cnf和index.txt.attr这两个文件)。只有一次看到有人建议保持默认的yes,或者说至少对这个设置不太在意,他们的理由是EasyRSA最初是为VPN场景设计的,当前默认设置对这个用例来说是最佳选择。但事实真的如此吗?背后的原因又是什么?
我其实理解这个选项的作用,也知道怎么修改它,但一直找不到早期默认设为yes的合理性依据。OpenSSL CA把它设为默认值,是为了解决什么安全问题吗?签发两个相同DN的证书会存在哪些风险?如果设置unique_subject=no的话,应该遵循哪些最佳实践?有没有足够充分的理由让我们保持默认设置?简而言之,到底有没有论据支持“阻止多个相同DN的有效证书同时存在”这种做法?
内容的提问来源于stack exchange,提问作者MiniMe

