【发布时间】:2011-09-01 17:31:22
【问题描述】:
我正在使用以下片段来设置证书和密钥以进行客户端身份验证。
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 文件已成功在浏览器中用于访问客户端身份验证 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
那么为什么它不能工作呢?
【问题讨论】:
-
我在命令行 curl 中遇到了同样的结果。我将客户端证书和密钥连接到一个文件中并尝试如下: curl --cert concatenatedCert.pem --cert-type PEM --cacert cabundle.crt inaveo:8775/DataIntegrationService/WebService/WS_test 输入 PEM 密码:curl: (58) 无法设置私钥文件:'concatenatedCert.pem' 类型 PEM
标签: authentication curl client