php curl 带证书但没有密钥文件或密码

php curl with certificate and no key file or passphrase

我对 php 的 curl 比较陌生,想问一个完整性检查问题。

我正在尝试 post 将一个 xml 文件发送到 https 服务器,并使用服务器管理员提供的 DER 格式的证书。我也成功地将 DER 文件转换为 ascii PEM 格式,但我收到的错误基本相同。

With PEM format:
* unable to use client certificate (no key found or wrong pass phrase?)

With DER format:
cURL Error (58): unable to set private key file:

With DER I use: CURLOPT_SSLCERTTYPE => "DER"

我的研究表明 PHP curl 还需要一个 PEM 格式的密钥文件或至少一个密码短语。服务器管理员需要为我提供一个或另一个。

我知道 Centos 和一些 linux 机器上的过时 curl 问题,并且已将 curl 升级到最新版本: curl 7.40.0 (x86_64-redhat-linux-gnu) libcurl/7.40.0 OpenSSL/1.0.1e zlib/1.2.3 c-ares/1.10.0 libidn/1.18 libssh2/1.4.3

我的cer和pem文件的权限是r--r--r--

我是否纠正了丢失的密钥,或者是否有办法向仅具有 DER 或 PEM 证书的 https 服务器生成这样的 post?非常感谢任何见解。

这是我的 php 脚本的核心:

$ch = curl_init();

$options = array(
    CURLOPT_POST => 1,
    CURLOPT_HTTPHEADER => ['Content-Type:', 'text/xml'],
    CURLOPT_POSTFIELDS => $testorder,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_SSLCERTTYPE => "DER", // commented out for PEM version
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
    CURLOPT_VERBOSE        => true,
    CURLOPT_URL => $url,
    CURLOPT_SSLCERT => $cert_file,
);

curl_setopt_array($ch , $options);

$output = curl_exec($ch);

您似乎为客户端证书身份验证设置了选项,但只提供了一个包含 public 密钥的 PEM 文件,没有私钥。您还需要一个私钥。