x509 证书的字符编码是什么?

What is the Character Encoding of x509 certificates?

我正在实施 SCEP 服务器来分发客户端证书。根据protocol,对于来自设备的GetCACert请求,响应header的content-type应该是application/x-x509-ca-cert

我的问题是,默认情况下,我的应用程序的过滤器将每个响应的字符编码设置为 UTF-8,因此响应变为 application/x-x509-ca-cert;charset=UTF-8。设备不喜欢此字符编码部分并拒绝响应。

我怀疑设备可能会尝试将响应从 UTF-8 格式转换,因此我尝试将我的响应编码为 UTF-8,但设备仍然不接受我的响应。

然后我将 burp 代理设置为设备并从响应 header 中删除了 charset=UTF-8 部分并且设备接受了响应。

谷歌搜索后,我发现证书是用 DER 编码的,但是当我将 DER 作为字符编码时,java 表示 unknown-encoding 并且IANA 字符编码在其官方字符集中没有 DER

我的问题是“可用于定义 x509 证书字符编码的官方字符集名称是什么?”。

证书是二进制的。它们没有字符编码,因为它们不是字符而是普通的八位字节(字节)。如果您尝试使用某些字符编码对这些 non-characters 进行编码,这将无济于事。相反,您需要省略字符集属性。