【发布时间】:2012-03-29 12:13:58
【问题描述】:
当我使用以下 PHP 代码(和相同的配置参数)创建私钥字符串时,它们被包含在不同的字符串之间:
$configs = array('config' => 'OpenSSL.cnf',
'digest_alg' => 'sha1',
'x509_extensions' => 'v3_ca',
'req_extensions' => 'v3_req',
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
'encrypt_key' => false,
'encrypt_key_cipher' => OPENSSL_CIPHER_3DES);
$privateKeyResourceId = openssl_pkey_new($this->configs);
openssl_pkey_export($privateKeyResourceId, $privateKeyString);
在 Linux 上,$privateKeyString 如下所示:
-----开始私钥-----NBgkqhkiG9w0BAQE....ASDFasjkfa-----结束私钥-----
在 Windows 上,$privateKeyString 如下所示:
-----BEGIN RSA PRIVATE KEY-----NBgkqhkiG9E....ASDFasjkfa-----END RSA PRIVATE KEY-----
当我将 Windows 私钥字符串复制到 Linux 时,它一直有效,直到我从开始/结束中删除“RSA”(反之亦然)。这是为什么呢?
【问题讨论】:
-
OpenSSL 支持不止一种私钥格式。正在使用哪种格式的 PEM 标头标识符。第一个是标准 PKCS 格式,并包含一个标识符,表明它是一个 RSA 密钥。第二个是特定于 RSA 的格式,因此不需要该标识符。默认格式在 PHP 5.2.9 和 5.3.3 之间发生了变化。
-
感谢您的评论。这意味着这不是操作系统问题。必须检查一下。
-
绝对不是操作系统问题。这是一个PHP问题。 (两者都没有损坏,只是如果您的代码需要一个并得到另一个,...)