SSL 证书中的自定义数据

信息安全 tls 证书 公钥基础设施 x.509
2021-08-25 07:55:17

我正在寻找一种在标准 CA 颁发的 SSL 服务器证书中添加额外自定义数据的方法。这可能吗?

我想获得由标准 CA 颁发的 SSL 服务器证书,以便标准浏览器接受它。但是,我的私人应用程序将使用少量额外数据,我也希望将这些数据包含在证书中。我正在寻找一种将它包含在证书中的方法,以一种标准浏览器将忽略并且(关键)CA 不会剥离的方式。

是否有一个字段或地方可以存储任意数据,而不会被公共 CA 剥离?

也许otherName:subjectAltName它会被任何标准 CA 保留吗我应该查看自定义 x509 扩展吗?

关键要求是 CA 不删除或修改此内容。我需要至少存在一个受主要浏览器信任的 CA,并且不会删除这些自定义数据。我知道证书签名请求 (CSR) 的某些字段已被 CA 过滤或剥离,但我无法找到关于哪些字段(如果有)允许任意数据并将从 CSR 保留到最终证书。


这个问题是相关的,但不一样:它不要求证书由现代浏览器信任的 CA 签名。此外,我还发现了很多关于如何向 x509 CSR 添加自定义扩展的信息,但这不是我想要的;这并没有告诉我将数据填充到哪个扩展名(主要 CA 不会剥离哪个扩展名)。我知道如何创建包含自定义数据的 CSR,但我不知道 CSR 的哪些字段将未经修改地复制到最终服务器证书中。我也不是在寻找涉及运行我自己的 CA 的解决方案:我希望服务器证书被标准浏览器接受。 这个问题看起来也很相似,但我在那里没有看到明确的答案。

2个回答

好吧,我会联系 CA 询问他们是否会这样做。他们可以做到,如果您支付足够的费用,他们可能愿意这样做。任何浏览器不理解的非关键字段都将被忽略并且可以由 CA 添加。问题是他们是否会这样做,而这只能由他们来回答。

一些 CPS 甚至提到了添加非关键扩展的可能性(并且这些扩展可以是私有的)并且当然不添加关键的私有扩展(https://www.digicert.com/docs/cps/DigiCert_CP_v409-1-June-2015 -signed.pdf - 7.1.2)。这只是想做的事。

颁发者 CA 应根据适用的行业标准使用证书扩展,包括 RFC 3280/5280。颁发者 CA 不得颁发具有关键私有扩展的证书。

但可能正确的方法是使用属性证书。您可以拥有一个属性证书颁发者,由您控制并向您的 SSL 证书颁发 AC,为其提供您需要且只有您了解的额外属性。TLS 支持将这些 AC 提供给您的客户端,或者您可以使用已经创建的 SSL 隧道发送后者,客户端可以根据需要解释这些 AC。

你问:

也许 subjectAltName 的 otherName 部分?

不,不在那里。主题替代名称 (SAN) 字段由浏览器读取,可用于进行中间人 (MITM) 攻击,因此 CA 不应允许 SAN 字段中的自定义(和非公开验证)数据。

我会向您指出定义 X.509 证书标准的RFC 5280 ,特别是Section 4.2 Certificate Extensions我没有看到任何允许一般文本的标准扩展,但以下专家很有趣(强调我的):

X.509 v3 证书格式还允许社区定义私有扩展来携带这些社区独有的信息。 证书中的每个扩展都被指定为关键或非关键。如果使用证书的系统遇到它无法识别的关键扩展或包含它无法处理的信息的关键扩展,则必须拒绝证书。一个非关键扩展如果不被识别可以被忽略,但如果它被识别则必须被处理。以下部分介绍了在 Internet 证书和标准位置中使用的推荐扩展信息以供参考。 社区可以选择使用额外的扩展


你说:

我知道如何创建包含自定义数据的 CSR,但我不知道 CSR 的哪些字段将未经修改地复制到最终服务器证书中。

这个网站上没有人可以为你回答这个问题。根据RFC 4210,CA 可以随意修改非关键扩展(并返回带有grantedWithModsPKIStatus 的证书)。因此,正如评论中提到的,这是您必须与特定 CA 协商的事情。