【发布时间】:2011-03-02 22:03:10
【问题描述】:
我正在研究 X509Certificates 和 keytool,但我对以下内容感到困惑:
证书可以以 cer(规范编码规则)格式以及 DER 格式存储吗?
我正在查看 SUN 关于 keytool 的各种教程,在某些情况下,它们似乎导入了以“.cer”结尾的证书或导出了扩展名为“.cer”的证书。
例如。
keytool -importcert -alias abc -file ABCCA.cer OR
keytool -exportcert -alias mykey -file MJ.cer
这是否意味着 cer 编码?因为最初我的印象是,如果您在 keytool 上进行导出,则默认值为 der。
还是 cer 和 der 可以互换?
谢谢
【问题讨论】:
-
证书没有 cer 编码之类的东西。 “.cer”只是用于证书的常见但无意义的文件扩展名。我相信微软默认将它用于 DER 编码的 X509 证书,因为即使他们做同样的事情,微软也必须始终以不同的方式做事。
-
@GregS:那么说证书应该是 DER 或 PEM 格式是否正确?所以实际的文件扩展名无关紧要吗?
-
DER 是适用于 ASN.1 描述的任何数据的编码规则,而不仅仅是证书。 PEM 也是一种编码方法,涉及对 DER 内容进行 base-64 编码,并在结果周围添加页眉和页脚行。
keytool支持 DER 编码的 X509 证书以及 X509 证书的 DER 编码的 PEM 编码。此外,对于证书链,keytool 支持 DER 编码的 PKCS#7 对象以及这些对象的 PEM 编码。文件扩展名总是无关紧要的。 -
因此,如果文件扩展名不相关,如果用户在 java 程序中将文件路径提供给可能是 DER、PEM、P12 或 PKCS7 格式的文件,在程序?我的意思是我很想知道在对其进行任何处理之前是否需要知道文件的编码。例如,检测到提供的文件在 DER 中,因此在例如之前对其进行 Base64 编码保存为文本文件或将其存储在数据库等中。如果它已经在 PEM 中,只需存储它。不要做任何其他事情,即对其进行编码
-
我不确定 keytool 是如何做到的。您几乎可以从文件的前“几个”字节中弄清楚。 PEM 文件以 ---BEGIN 之类的东西开头,所以如果您看到您知道您需要对剩余的行进行 base64 解码以获得 DER 编码。否则它应该已经是 DER 编码。接下来检查 DER 编码的前几个字节,看看它是否与 X509 证书编码或 PKCS#7 结构一致,或者两者都不一致。
标签: java security cryptography x509certificate keytool