Php 为什么在Linux或Windows下使用不同的私钥字符串?
当我使用以下PHP代码(和相同的配置参数)创建私钥字符串时,它们被封装在不同的字符串之间:Php 为什么在Linux或Windows下使用不同的私钥字符串?,php,openssl,rsa,x509,Php,Openssl,Rsa,X509,当我使用以下PHP代码(和相同的配置参数)创建私钥字符串时,它们被封装在不同的字符串之间: $configs = array('config' => 'OpenSSL.cnf', 'digest_alg' => 'sha1', 'x509_extensions' => 'v3_ca', 'req_extensions' => 'v3_req',
$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如下所示:
-----开始RSA私钥------NBgkqhkiG9E…ASDFasjkfa------结束RSA私钥-----
当我将Windows私钥字符串复制到Linux时,它会一直工作,直到我从开始/结束处删除“RSA”(反之亦然)。这是为什么?根据一项研究,这是一个已知的问题:
请注意,较早版本的PHP/OpenSSL会导出带有“----BEGIN RSA private key---”PEM标记的RSA私钥,该标记只包含privateKey字段,因此省略了version和privateKeyAlgorithm字段
这样做的效果是,如果你把它转换成DER
然后返回PEM,但使用“----开始私钥---”PEM标记,
openssl_pkey_get_privatekey()函数将失败!森特里尔氏
代码可用于在PEM编码数据前加上版本和
privateKeyAlgorithm字段
较新的PHP/OpenSSL版本将RSA私钥导出为
“----开始私钥------”PEM标记,其中包括版本和
privateKeyAlgorithm字段
我注意到我的两台服务器之间存在以下差异:
Fedora Core 12 x64上的PHP版本5.3.3(OpenSSL 1.0.0a-fips 2010年6月1日)
Fedora Core 10 x64上的PHP版本5.2.9(OpenSSL 0.9.8g,2007年10月19日)
这是openssl版本与PHP版本之间的差异。以下openssl命令在openssl版本0.9.x和1.0.0x之间创建不同的密钥页眉/页脚: openssl-req-new-keyout mykey.key-out mycertreq.csr-nodes-sha1-newkey rsa:2048 对于版本0.9.x,关键页眉/页脚为: -----开始RSA私钥----- -----结束RSA私钥----- 对于版本1.0.0x,关键页眉/页脚为: -----开始私钥----- -----结束私钥----- 对于更高版本的openssl,我必须通过以下命令运行密钥文件,使其与旧的默认值兼容: openssl rsa-在mykey.key-text>mykey.pem中
“mykey.pem”文件的页眉/页脚(和格式)与AWS和类似服务兼容。OpenSSL支持多种私钥格式。正在使用的格式的PEM标头标识符。第一个是标准PKCS格式,包含一个标识符,指示它是RSA密钥。第二个是特定于RSA的格式,因此不需要该标识符。默认格式在PHP5.2.9和5.3.3之间更改。感谢您的评论。这意味着这不是操作系统的问题。我必须检查一下,这绝对不是操作系统的问题。这是一个PHP问题。(两者都不坏,只是如果您的代码期望一个而得到另一个,…)谢谢!这解决了我在尝试将密钥上传到Amazon AWS时遇到的问题!