PHP Curl Error: Unable to load client cert -8018. (Connecting to SSO API)
PHP Curl Error: Unable to load client cert -8018. (Connecting to SSO API)
我正在尝试使用 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 中添加证书后)
我解决了 problem.The 没有证书信息的 RSA 密钥问题。我将证书密钥转换为 RSA,但此文件没有我们必须与密钥一起提交的证书信息。因此,通过导出 public 部分,然后导出私有 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);
我希望这个回答能对某人有所帮助。
谢谢你
我正在尝试使用 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 中添加证书后)
我解决了 problem.The 没有证书信息的 RSA 密钥问题。我将证书密钥转换为 RSA,但此文件没有我们必须与密钥一起提交的证书信息。因此,通过导出 public 部分,然后导出私有 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);
我希望这个回答能对某人有所帮助。
谢谢你