【问题标题】:Certificate encodings with X509Certificates and keytool使用 X509Certificates 和 keytool 进行证书编码
【发布时间】: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


【解决方案1】:

默认情况下,keytool 使用 DER(“可分辨编码规则”)导出,这是 X509 证书的常见二进制编码。

不幸的巧合,CER 是另一种 ASN.1 编码的名称,同时也是“证书”的前三个字母......

【讨论】:

  • 那么说证书应该是 DER 或 PEM 格式是否正确?所以实际的文件扩展名无关紧要?
  • 是的,它在 DER 中导出,除非您使用 -rfc 选项,在这种情况下它使用 PEM(实际上只是带有页眉和页脚的 base64 编码的 DER)。对于导入,它支持 DER、PEM 和 PKCS#7;文件扩展名无关紧要。
  • 因此,如果文件扩展名不相关,如果用户在 java 程序中将文件路径提供给可能是 DER、PEM、P12 或 PKCS7 格式的文件,在程序?我的意思是我很想知道在对其进行任何处理之前是否需要知道文件的编码。例如,检测到提供的文件在 DER 中,因此在例如之前对其进行 Base64 编码保存为文本文件或将其存储在数据库等中。如果它已经在 PEM 中,只需存储它。不要做任何其他事情,即对其进行编码
  • 不太清楚你在问什么。 keytool 通常以自己的“JKS”格式存储密钥和证书(除非您安装了一些替代提供程序),因此它会根据需要将各种编码转换为/从该格式转换。
  • 如果 java 程序(程序员创建的任何处理证书以提供安全功能的应用程序)获取用户指定的文件。该程序如何“判断”该文件是否由用户是 P12 或 PEM 或 DER 或 PKCS7?用户应该指定格式吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 2023-03-24
  • 2020-10-30
  • 1970-01-01
  • 2018-04-08
  • 2011-12-18
  • 1970-01-01
相关资源
最近更新 更多