带有PHP-cURL的客户端SSL证书

时间:2020-10-13 21:00:50

标签: php apache ssl curl ssl-certificate

我创建了一个自签名证书,以允许我的客户端连接到我的Web服务器,并拒绝其他任何人的访问。我在Apache的VHost中添加了以下配置,该配置运行良好(意味着,它允许证书所有者使用该网站并拒绝访问其他网站)。

Apache VHost包含的配置:

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /path-to-ca/ca.crt
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e

问题是我在登录页面上使用了某个API,并通过使用cURL来请求它,由于 SSLVerifyClient要求,该URL无法实现。

我尝试添加以下cURL选项,但到目前为止没有任何运气(由于“找不到客户端证书”,$ ret为空)。我可以验证证书的权限是否正确,并且路径正确。欢迎提供有关如何在cURL中正确使用我的客户证书的任何建议。

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://mydomain.xyz/some/path/auth/authenticate",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\n\t\"email\": \"$email\",\n\t\"password\": \"$password\"\n}",
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/json",
    ),
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSLCERT => "/path/to/client/curlCert.pem",
    CURLOPT_SSLCERTPASSWD => "MY-CERTIFICATE-PASSWORD",
));

$response = curl_exec($curl);
curl_close($curl);

$ret = json_decode($response, true);

0 个答案:

没有答案