我正在使用下面的snipped来设置证书和密钥以进行客户端身份验证.
curl_easy_setopt(curl,CURLOPT_SSLCERT,"clientCert.pem");
curl_easy_setopt(curl,CURLOPT_SSLCERTPASSWD,"changeit");
curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
curl_easy_setopt(curl,CURLOPT_SSLKEY,"privateKey.pem");
curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,"changeit");
curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,"PEM");
Run Code Online (Sandbox Code Playgroud)
证书没有密码,我不知道为什么选择SSLCERTPASSWD存在,我只提供了一个虚拟值.当我在Linux上运行程序时,我得到错误代码58和错误消息无法设置私钥文件:'privateKey.pem'类型PEM
但是在Windows上,我无法使用客户端证书(找不到密钥或错误的密码?)
它似乎暗示证书和密钥不匹配但我不知道如何.我使用openssl命令从p12文件中提取了证书和密钥.我用来提取密钥的命令是
openssl.exe pkcs12 -in client.p12 -nocerts -out privateKey.pem
Run Code Online (Sandbox Code Playgroud)
用于提取证书的命令是
openssl.exe pkcs12 -in client.p12 -nokeys -out clientCert.pem
Run Code Online (Sandbox Code Playgroud)
p12文件已成功用于浏览器以访问客户端身份验证URL.在我开枪之前请帮忙.
编辑:以下是私钥和证书相互对应的证明:
[debugbld@nagara ~/curlm]$ openssl x509 -noout -modulus -in clientCert.pem | openssl md5
d7207cf82b771251471672dd54c59927
[debugbld@nagara ~/curlm]$ openssl rsa -noout -modulus -in privateKey.pem | openssl md5
Enter pass phrase for privateKey.pem:
d7207cf82b771251471672dd54c59927
Run Code Online (Sandbox Code Playgroud)
那么为什么它不能工作呢?