Php EPP呼叫上的客户端证书
我试图在curl调用中使用cacert.org提供的免费客户端证书。检查以下内容Php EPP呼叫上的客户端证书,php,ssl,curl,ssl-certificate,epp,Php,Ssl,Curl,Ssl Certificate,Epp,我试图在curl调用中使用cacert.org提供的免费客户端证书。检查以下内容 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://url.com'); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_seto
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://url.com');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.crt');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
我已经下载了PEM证书,现在我得到以下错误
unable to set private key file: 'cert.crt' type PEM
我已经尝试了所有的方式,但无法修复,尝试谷歌以及。请提供帮助。我认为问题在于您的证书文件不包含私钥,并且没有使用指向证书对应私钥的
CURLOPT\u SSLKEY
选项单独提供
我猜证书是从CA颁发给您的,并安装在您的浏览器中。发生这种情况时,浏览器会将私钥存储在与证书分离的安全位置(取决于操作系统和浏览器)
大多数浏览器不允许您在不加密(提供密码)的情况下导出证书和私钥。但是根据PEM文件的内容,没有相应的私钥
要解决此问题,您可能需要执行以下几个步骤:
- 再次从浏览器导出证书,并确保其中包含私钥
- Win/Linux上的Chrome和Windows上的Internet Explorer将要求您输入密码。证书应导出为PKCS#12(.p12)文件
- 使用
解密私钥,并将证书和密钥导出为PEM格式openssl
(这将要求您在从浏览器导出时输入用于加密的密码)(cert.p12是pkcs12格式的证书和私钥。openssl pkcs12-in cert.p12-nodes
允许私钥在不加密的情况下导出)-nodes
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
及
您很可能已经拥有证书,但需要将私钥保存到另一个文件中由于它在服务器上未加密,请务必正确设置权限,通常
0400
,因此其他用户无法访问它我认为问题在于您的证书文件不包含私钥,并且没有使用指向证书对应私钥的CURLOPT\u SSLKEY
选项单独提供
我猜证书是从CA颁发给您的,并安装在您的浏览器中。发生这种情况时,浏览器会将私钥存储在与证书分离的安全位置(取决于操作系统和浏览器)
大多数浏览器不允许您在不加密(提供密码)的情况下导出证书和私钥。但是根据PEM文件的内容,没有相应的私钥
要解决此问题,您可能需要执行以下几个步骤:
- 再次从浏览器导出证书,并确保其中包含私钥
- Win/Linux上的Chrome和Windows上的Internet Explorer将要求您输入密码。证书应导出为PKCS#12(.p12)文件
- 使用
解密私钥,并将证书和密钥导出为PEM格式openssl
(这将要求您在从浏览器导出时输入用于加密的密码)(cert.p12是pkcs12格式的证书和私钥。openssl pkcs12-in cert.p12-nodes
允许私钥在不加密的情况下导出)-nodes
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
及
您很可能已经拥有证书,但需要将私钥保存到另一个文件中由于该证书在服务器上未加密,请务必正确设置权限,通常为
0400
,以便其他用户在导出证书时无法访问该证书证书是否包含私钥?@drew010否,即使我从comodo买了一个付费ssl,但这也不能解决我的问题。你想做什么CURLOPT_SSLCERT
用于指定用于与远程服务器进行身份验证的客户端身份验证证书。一些CA使用它们代替密码登录来管理您的帐户,但客户端证书并不常见。您是在寻找CURLOPT_CAINFO
吗?@drew010我尝试了这两种方法,但都无效,网站希望我在请求时使用客户端证书。OK只是确认一下。问题是cURL似乎没有客户端证书的私钥,这会导致错误“无法设置私钥文件”。您的crt文件似乎是PEM格式,所以它应该是base64编码的。它是否包含一行----开始加密私钥------
或----开始RSA私钥------
或您是否只看到----开始证书------
?当您导出证书时,它是否包含私钥?@drew010否,即使我从comodo买了一个付费ssl,但这也不能解决我的问题。你想做什么CURLOPT_SSLCERT
用于指定用于与远程服务器进行身份验证的客户端身份验证证书。一些CA使用它们代替密码登录来管理您的帐户,但客户端证书并不常见。您是在寻找CURLOPT_CAINFO
吗?@drew010我尝试了这两种方法,但都无效,网站希望我在请求时使用客户端证书。OK只是确认一下。问题是cURL似乎没有客户端证书的私钥,这会导致错误“无法设置私钥文件”。您的crt文件似乎是PEM格式,因此