该网站说“你没有使用数字证书进行身份验证,或者可能连接时间已过期。请再次使用您的数字证书进行身份验证。”
我每次都收到这条消息,所以不是连接时间到期,我认为我的身份验证尝试不起作用。
我这样做的方式是从一个pfx文件开始,然后用密码来打开它。我用openssl和pfx制作了pem证书。
码:
$pfx_path = 'me.pfx';
$pfx_pass = 'foopass123';
$pfx_values = [];
openssl_pkcs12_read(file_get_contents($pfx_path), $pfx_values, $pfx_pass);
$cert_path = 'me.pem';
file_put_contents($cert_path, $pfx_values['cert'] . "\n" . $pfx_values['pkey']);
$postfields = 'field1=val1&field2=val2&field3=val3';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL , 'https://www.example.com');
curl_setopt($ch, CURLOPT_POST , true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $postfields);
curl_setopt($ch, CURLOPT_SSLCERT , $cert_path);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$curl_result = curl_exec($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);
执行代码的结果(仅显示$ curl_result的HTML引用):
您未使用数字证书进行身份验证,或者连接时间可能已过期。使用数字证书再次验证。
顺便说一句,$curl_info['ssl_verify_result']是0,我想这意味着至少服务器已经正确认证。
编辑:删除CURLOPT_SSLCERTPASSWD,因为它没有必要,pfx文件已经打开密码,其私人和公钥被裸体放入$cert_path。