x509 证书中允许有空格吗?

问题描述 投票:0回答:3

有时,当用户将 x509 证书从网络剪切并粘贴到我们的系统中时,空格会在其中混淆。

假设空格不是 x509 证书中的有效字符并将其删除是否安全?

x509certificate x509
3个回答
10
投票

我假设谁在谈论 PEM 编码证书,即带有

-----BEGIN CERTIFICATE-----
标头和
-----END CERTIFICATE-----
页脚的证书,看起来像这样:

-----BEGIN CERTIFICATE-----
MIICwzCCAaugAwIBAgIKUXEyN2GLpe8......
-----END CERTIFICATE-----

在这种情况下,证书内容使用 Base64 进行编码。由于证书是数字签名的对象,因此您不能更改任何一位,否则签名验证将失败。 但是 空格字符(包括制表符或换行符)不是有效的 Base64 字符。如果证书字符串中添加了一些空格字符,您可以安全地删除它们,因为它们不是有效字符。强大的证书解析器可能会忽略它们。请注意,通常的做法是将 PEM 编码的证书拆分为 64 列的行;证书阅读器将忽略添加的换行符。

好消息:删除这些附加字符后,由于数字签名,如果证书解析成功,则意味着其完整性是好的。


5
投票

是的,根据 RFC 7468,允许有空格。

首先,传统的base64解码器(如RFC 3548或RFC 4648中指定的)不允许八位字节流中出现意外的字节(例如空格)。因此,根据这些 RFC,带有空格的 Base64 编码数据是无效的。

但是,MIME (RFC 2045) 的 Base64 编码在第 6.8 节中明确,并且允许解码此类数据:

解码软件必须忽略表 1 中未找到的所有换行符或其他字符。

不幸的是,从来没有一个clear规范表明“PEM编码的”x509证书必须使用符合RFC 2045的base64编码(另请参阅在哪里指定了PEM文件格式?

自 2015 年以来,有一个明确的来源澄清了此处提出的问题。它是RFC 7468,它指定了证书的文本编码。它说:

此外,解析器应该忽略空格和其他非 Base64 字符

最宽松的解析器实现根本不是面向行的,并且 将接受封装外部的任何空白混合 边界


0
投票
RFC 没有说不允许或不允许。它说解析器应该忽略它,这意味着如果您有带有空格的证书,它应该由符合 RFC7468 的解析器正确解析

© www.soinside.com 2019 - 2024. All rights reserved.