有时,当用户通过网络将x509证书切换到我们的系统中时,空间会混入其中。
是否可以安全地假设空格在x509证书中不是有效字符并将其删除?
答案 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个字符
最松散的解析器实现根本不是面向行的 将接受封装之外的任何空白混合 边界