【问题标题】:Client certificate on EPP CallEPP 呼叫上的客户证书
【发布时间】:2015-12-08 19:11:31
【问题描述】:

我正在尝试在 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_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

我已经尝试了所有方法但无法修复,也尝试了谷歌。请帮忙。

【问题讨论】:

  • 导出证书时是否包含私钥?
  • @drew010 不,即使我已经从 comodo 购买了付费 ssl,但这也没有解决我的问题。
  • 你想做什么? CURLOPT_SSLCERT 用于指定用于与远程服务器进行身份验证的客户端身份验证证书。一些 CA 使用它们而不是密码来登录来管理您的帐户,但客户端证书并不常见。您是在寻找 CURLOPT_CAINFO 吗?
  • @drew010 我都试过了,但都没有成功,网站希望我在提出请求时使用客户端证书。
  • 好的,只是在确认。问题是 cURL 似乎没有客户端证书的私钥,这会导致错误“无法设置私钥文件”。您的 crt 文件似乎是 PEM 格式,因此它应该只是 base64 编码。它是否包含-----BEGIN ENCRYPTED PRIVATE KEY----------BEGIN RSA PRIVATE KEY----- 行,还是您只看到-----BEGIN CERTIFICATE-----

标签: php ssl curl ssl-certificate epp


【解决方案1】:

我认为问题在于您的证书文件包含私钥,并且没有使用指向证书对应私钥的CURLOPT_SSLKEY 选项单独提供。

我猜证书是从 CA 颁发给您并安装在您的浏览器中的。发生这种情况时,浏览器会将私钥存储在与证书分开的安全位置(取决于操作系统和浏览器)。

大多数浏览器不允许您在未加密的情况下导出证书和私钥(提供密码)。但是根据你的PEM文件的内容,没有对应的私钥。

要解决此问题,您可能需要执行几个步骤:

  • 再次从浏览器中导出证书并确保其中包含私钥
  • Win/Linux 上的 Chrome 和 Windows 上的 Internet Explorer 将要求您输入密码。证书应导出为 PKCS#12 (.p12) 文件

现在的问题是私钥是加密的,据我所知,它需要为 cURL 解密

  • 使用openssl解密私钥并将证书和密钥导出为PEM格式
  • openssl pkcs12 -in cert.p12 -nodes(这会在你从浏览器导出时询问用于加密的密码)(cert.p12 是 PKCS12 格式的证书和私钥。-nodes 允许在不加密的情况下导出私钥)

这将以 PEM 格式将证书和密钥打印到标准输出。

您应该看到两个部分:

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

您很可能已经拥有证书,但您需要将私钥保存到另一个文件中。 由于在服务器上没有加密,请注意正确设置权限,通常是0400,这样其他用户就无法访问它

【讨论】:

  • 谢谢,我会尽力让你知道的。
  • 我已经正确导出,我有私钥和两个证书部分,我应该使用哪个证书?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多