php – Curl – 无法使用p12证书连接

我正在尝试使用Curl收集一些数据,连接到一些外部公司提供的服务.除了解决问题之外,他们还向我发送了建立连接所需的p12证书文件.

当我尝试使用卷曲时,我得到以下错误

#58: not supported file type 'P12' for certificate

到目前为止,我已经尝试更新curl和PHP-curl.没有改变.

我的代码

...
curl_setopt($ch, CURLOPT_SSLCERT, 'cert_path');
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'P12');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'my_pass');
...

有趣的是,这段代码适用于我们的生产环境,而它不适用于我的本地机器(Linux Mint 16).

解决方法:

找到了解决方案.

最简单的方法是从.p12文件提取.pem密钥和证书.

例如(在linux上测试):

openssl pkcs12 -in file.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in file.p12 -out file.crt.pem -clcerts -nokeys

将在当前目录中创建密钥/证书对.

现在,使用它:

curl_setopt($ch, CURLOPT_SSLCERT, 'file.crt.pem');
curl_setopt($ch, CURLOPT_SSLKEY, 'file.key.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'pass');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, 'pass');

pass是.p12文件的密码.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...