我正在使用以下代码片段来设置客户端身份验证的证书和密钥。
证书没有密码,我不知道为什么会有SSLCERTPASSWD选项,所以我只提供了一个虚拟值。 当我在Linux上运行程序时,我收到了错误代码58和错误消息:无法设置私钥文件:“privateKey.pem”类型为PEM。
然而,在Windows上,我收到了错误消息:无法使用客户端证书(未找到密钥或密码错误?)
这似乎表明证书和密钥不匹配,但我不知道原因。我使用openssl命令从p12文件中提取了证书和密钥。 我用于提取密钥的命令是:
那么为什么它不能工作呢?
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");
证书没有密码,我不知道为什么会有SSLCERTPASSWD选项,所以我只提供了一个虚拟值。 当我在Linux上运行程序时,我收到了错误代码58和错误消息:无法设置私钥文件:“privateKey.pem”类型为PEM。
然而,在Windows上,我收到了错误消息:无法使用客户端证书(未找到密钥或密码错误?)
这似乎表明证书和密钥不匹配,但我不知道原因。我使用openssl命令从p12文件中提取了证书和密钥。 我用于提取密钥的命令是:
openssl.exe pkcs12 -in client.p12 -nocerts -out privateKey.pem
提取证书的命令是
openssl.exe pkcs12 -in client.p12 -nokeys -out clientCert.pem
p12文件已成功用于浏览器访问客户端认证网址。 在我开枪之前请帮忙。
编辑: 这里有证据表明私钥和证书相对应:
[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
那么为什么它不能工作呢?