ssl cURL - 将终端curl命令转换为PHP脚本


ssl cURL - convert terminal curl command to PHP script

我有这个终端 curl 命令可以正常工作

curl -H "Content-Type: application/json" --cert cert.p12:myPassword -X POST -d 'myJsonData' https://api-applecareconnect-ept.apple.com/enroll-service/1.0/bulk-enroll-devices

我已经像这样转换了命令:

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSLCERT, "cert.p12"); 
    curl_setopt($ch, CURLOPT_SSLCERTTYPE, "P12"); 
    curl_setopt($ch, CURLOPT_SSLKEYPASSWD, "myPassword");
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $myJsonData);
    $ret = curl_exec($ch);
    if(empty($ret)) { echo 'error: nothing returned'; } else { echo 'success!'; }
    echo $ret;
    if($errno = curl_errno($ch)) {
         $error_message = curl_strerror($errno);
         echo "cURL error ({$errno}):'n {$error_message}";
    }
    curl_close($ch);

但我收到错误"访问被拒绝。需要客户端 SSL 证书"。

我做错了什么?

对于SSL_VERIFYHOST 对于"2",您必须确保SSL证书中的公用名与正在使用的主机名匹配。这是默认设置,只要您的SSL证书是为您正在使用它的主机名(公用名(正确创建的,就应该是直截了当的