PHP Curl错误:无法加载客户端证书-8018。(连接到SSO API)

PHP Curl错误:无法加载客户端证书-8018。(连接到SSO API),php,ssl,curl,single-sign-on,nss,Php,Ssl,Curl,Single Sign On,Nss,我正在尝试使用PHP中的Curl连接到一个单点登录API 但是我得到了一个-8018错误。 我将私钥转换为RSA密钥。但我仍然是一个错误 以下是PHP源代码: $cert_file = 'etc/pki/nssdb/new.pem'; $cert_password = '123456'; curl_setopt_array($curl, array( CURLOPT_URL => "UUL" CURLOPT_RETURNTRANSFE

我正在尝试使用PHP中的Curl连接到一个单点登录API 但是我得到了一个-8018错误。 我将私钥转换为RSA密钥。但我仍然是一个错误

以下是PHP源代码:

    $cert_file = 'etc/pki/nssdb/new.pem';
    $cert_password = '123456';
    curl_setopt_array($curl, array(
        CURLOPT_URL => "UUL"
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 300,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_SSLCERT => $cert_file,
        CURLOPT_SSLCERTPASSWD => $cert_password,
        CURLOPT_SSLCERTTYPE => 'pem',
        CURLOPT_HTTPHEADER => array(
            "cache-control: no-cache",
            "X-IAS-APIKEY: PEdk3kOkMtYsYzfb",
            'Content-Length: 0',
        ),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);
    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        echo $response;
    }
}
以下是结果(在NSS DB中添加证书后)


我解决了这个问题。问题是没有证书信息的RSA密钥。我将证书密钥转换为RSA,但此文件没有证书信息,我们必须随密钥一起提交。因此,通过导出公共部分,然后导出私有RSA部分,最后将其合并到代码中,就可以了

$cert_password = '****';
    curl_setopt_array($curl, array(
        CURLOPT_URL => URL,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 300,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_SSLCERT => $cert_file,
        CURLOPT_SSLKEY => $cert_key,
        CURLOPT_SSLCERTPASSWD => $cert_password,
        CURLOPT_SSLCERTTYPE => 'pem',
        CURLOPT_HTTPHEADER => array(
            "cache-control: no-cache",
            "X-IAS-APIKEY: APIKEY",
            'Content-Length: 0',
        ),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);
我希望这个答案可以帮助别人

多谢各位