我需要一些关于以下问题的帮助。
多用户电子商务应用程序使用.pem格式证书来加密paypal按钮,到目前为止所有证书都是使用带有openssl命令的Linux控制台生成的。
到目前为止一切正常,但如果客户有很多用户,我们希望用户可以从他们的管理面板生成证书,但这不是一个实际的过程。
我找到了以下脚本来生成证书:
$dn = array("countryName" => 'GB', "stateOrProvinceName" => 'State', "localityName" => 'SomewhereCity', "organizationName" => 'MySelf', "organizationalUnitName" => 'Whatever', "commonName" => 'mySelf', "emailAddress" => 'user@domain.com');
$privkeypass = '1234';
$numberofdays = 365;
$privkey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $privkey);
$sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays);
openssl_x509_export($sscert, $publickey);
openssl_pkey_export($privkey, $privatekey, $privkeypass);
openssl_csr_export($csr, $csrStr);
echo $privatekey; // Will hold the exported PriKey
echo $publickey; // Will hold the exported PubKey
echo $csrStr; // Will hold the exported Certificate
此脚本的输出生成了三个块
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----
作为测试,我复制整个块----- BEGIN CERTIFICATE ----- ----- END CERTIFICATE -----并将其粘贴在扩展名为.crt的文本文件中。< / p>
然后我会使用paypal帐户并尝试上传证书,但PayPal告诉我该文件不是.pem格式
The certificate you are trying to upload is not in the proper format. The certificate must be in .pem format.
其实我对PHP的ssl功能没有多少经验,所以我转向你,如果有人能就这个问题给我一些启示,我从现在开始欣赏它。
答案 0 :(得分:0)
我已经测试了运行您的代码并将结果发送到此验证页面 https://www.sslshopper.com/certificate-decoder.html
如果您只打印公钥并对其进行测试,则似乎生成正确的证书。
主要由于编码,似乎是密钥的crt和cer之间格式的差异。 https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them
测试不同的编码或文件扩展名。