【问题标题】:Private key PEM headers私钥 PEM 标头
【发布时间】:2013-01-28 05:29:08
【问题描述】:

我有一个 DER 格式的私钥。我试图将其转换为 PEM 格式。在转换时我做

   -----BEGIN PRIVATE KEY-----

        Base64.encode(privateKey,.getEncoded());

   -----END PRIVATE KEY-----

但在某些示例中,我看到,在标题之后的行下方。

   Proc-Type: 4,ENCRYPTED
   DEK-Info: DES-EDE3-CBC,F2D4E6438DBD4EA8

它们有什么意义吗?从 DER 转换为 PEM 时是否也应该添加?

【问题讨论】:

  • 是的,它们表明密钥是用给定的算法加密的。虽然我不知道确切的细节(我们的开发人员知道,因为我们支持此类密钥)但您可以查看 Putty 和 OpenSSH 源代码。

标签: ssl openssl ssl-certificate private-key


【解决方案1】:

在安全性方面,通常认为私钥不加密是一种不好的做法。

基本上,标头表明私钥 base64 数据是用密码加密的。所以任何试图读取私钥的程序(例如网络服务器)都会知道私钥是受密码保护的,它首先需要密码来解密私钥。

如果这些标头不存在,程序会假定 base64 密钥数据是纯文本格式,会直接使用它。

如果您不使用密码来保护 pem 格式的密钥,那么 pem 可能如下所示(没有标题):

-----开始 RSA 私钥----- MIICWwIBAAKBgQDL9R9pUyXOnHybNhm9FqhNjUX1W2HEt7bCGQIo0FvT6UyyL7TT -----结束 RSA 私钥-----

【讨论】:

    【解决方案2】:

    如果您要加密 PEM 文件,这些标头很重要。 第一个告诉文件是否被加密,第二个给出加密算法(如您所见)和初始向量。

    【讨论】:

      【解决方案3】:

      这些标头源自原始的PEM format。 PEM 在部署之前已被新的安全标准取代,但文件格式和以纯文本形式传输二进制数据的想法在许多不同的标准中得到了重复使用。

      OpenSSL header file pem.hRFC7468 定义了其中的大部分。然而,OpenSSHOpenPGP 等新标准也使用这种格式以纯文本形式存储密钥。

      您可以查看this answer了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 2023-02-07
        • 1970-01-01
        • 2016-02-29
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多