加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

无法使用libcurl访问需要客户端身份验证的站点

发布时间:2020-12-14 00:59:37 所属栏目:Linux 来源:网络整理
导读:我正在使用下面的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_seto
我正在使用下面的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,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,我使用.pem文件也得到了同样的错误,该文件也是从p12文件中使用openssl获得的,p12在浏览器中导入时也能正常进行客户端身份验证.就像你描述的那样,我想.

我的问题是由于.pem文件没有以正确的顺序列出证书引起的:似乎文件中的每个证书都必须跟随其颁发者证书.我编辑了文件并更改了部分的顺序,curl很高兴.

为了记录,我的原始.p12文件是通过从Firefox备份证书获得的.

另请注意,就我而言,我没有收到提示输入密码的信息

curl: (58) unable to set private key file: 'alice.pem' type PEM

在密码提示之前

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读