x509Certificates中是否允许使用空格?

时间:2014-10-21 20:56:59

标签: x509certificate x509

有时,当用户通过网络将x509证书切换到我们的系统中时,空间会混入其中。

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

2 个答案:

答案 0 :(得分:6)

我假设谁在谈论PEM编码证书,即带有-----BEGIN CERTIFICATE-----标题和-----END CERTIFICATE-----页脚的证书,看起来像这样:

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

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

好消息:删除这些附加字符后,由于数字签名,如果证书成功解析,则表示其完整性正常。

答案 1 :(得分:2)

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

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

但是,MIME(RFC 2045)的base64编码在第6.8节中是明确的,而允许用于解码此类数据:

  

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

不幸的是,从来没有 clear 规范说“PEM编码的”x509证书必须使用符合RFC 2045的base64编码(另见{{3} })

自2015年以来,有一个明确的来源澄清了此处提出的问题。它是Where is the PEM file format specified?,它指定证书的文本编码。它说:

  

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

     

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