我对卷曲的php比较新,想问一个健全性检查问题。
我正在尝试使用服务器管理员提供的DER格式的证书将xml文件发布到https服务器。我也成功地将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 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服务器?任何见解都非常赞赏。
这是我的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);
答案 0 :(得分:3)
看起来您为客户端证书身份验证设置了选项,但只提供了一个包含公钥的PEM文件,没有私钥。你也需要私钥。