我创建了一个自签名证书,以允许我的客户端连接到我的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);