有没有办法将现有CSR“国家代码”字段的string格式从UTF8更改为可打印的string?

CentOS 5.x

简短版本:

有没有办法将现有 CSR“国家代码”字段的编码格式从UTF8更改为可打印的string?

长版:

我有一个使用标准的Java安全提供程序(jsse / jce)从产品生成的CSR。 CSR中的一些信息使用UTF8string(据我所知是2003年12月31日 – RF 3280的首选编码要求)。

我明确提交CSR的证书颁发机构要求将国家代码指定为PrintableString。 我的CSR将其列为UTF8string。

我回到最新的RFC – http://www.ietf.org/rfc/rfc5280.txt 。 这似乎与countryName具体冲突。 这里有一点点混乱

countryName是相对DN的一部分。 相对DN被定义为DirectoryStringtypes,它被定义为teletexString,printableString,universalString,utf8String或bmpString的select。 它还更具体地将countryName定义为alpha(上限2个字节)或numeric(上限3个字节)。 此外,在附录中,它指的是X520countryName,它仅限于大小为2的PrintableString。

所以,很明显为什么它不起作用。 看来证书颁发机构和Sun / Java不同意他们对countryName要求的解释。 有什么我可以做的修改企业社会责任与CA兼容?

弄清楚了。 这里是基本的步骤:

1)打开原始CSR,并在“— BEGIN CERTIFICATE REQUEST —”和“— END CERTIFICATE REQUEST —”标记之间复制base64数据。

2)把这些数据放入一个base64解码器,并将输出保存为一个二进制文件。 有各种各样的在线服务可以做到这一点,或者如果你喜欢有本地工具。

3)下载/安装hex编辑器。 用它来打开解码的二进制文件。

4)在countryName前面查找两个值:

0C 02 

5)编辑值0C(UTF8String)并将其更改为13(Printablestring)

6)保存更改并使用base64编码器将其编码回base64。

7)在“— BEGIN CERTIFICATE REQUEST —”和“— END CERTIFICATE REQUEST —”标记之间添加base64数据。