无法在 libcurl 中获取证书位置
Failed to get certificate location in libcurl
我在用C++编写的客户端应用程序中使用libcurl,使用HTTPS连接到远程系统。客户端证书进一步保护连接。连接后,我收到以下消息:
Cert file: 'C:my-certsclient.crt'.
Key file: 'C:my-certsclient.key'.
CURL (0): Trying <ipaddress>...
CURL (0): TCP_NODELAY set
CURL (0): Connected to <hostname> (<ipaddress>) port 443 (#0)
CURL (0): schannel: SSL/TLS connection with <hostname> port 443 (step 1/3)
CURL (0): schannel: disabled server certificate revocation checks
CURL (0): schannel: verifyhost setting prevents Schannel from comparing the supplied target name with the subject names in server certificates.
CURL (0): schannel: Failed to get certificate location for C:my-certsclient.crt
The connection to <hostname> was closed.
我确定.crt和.key文件存在于指定位置,并且是可读的。我在 CURL 中设置了以下与 SSL 相关的选项:
CURLOPT_SSLCERT: C:my-certsclient.crt
CURLOPT_SSLKEY: C:my-certsclient.key
CURLOPT_SSL_VERIFYHOST: 0
CURLOPT_SSL_VERIFYPEER: 0
消息"无法获取证书位置"是什么意思,我该怎么办?
我正在使用libcurl/7.61.1-DEV WinSSL zlib/1.2.11,取自vcpkg,并在Windows 7上运行。禁用客户端证书后,应用程序工作正常;只有当我添加 SSLCERT 和 SSLKEY 选项时,它才会失败。
如果 libcurl 是在 Windows(本机 TLS API(上使用 schannel 构建的,则似乎您无法指定证书文件的路径。您需要在系统存储中指定证书的路径,如文档中所述:
(仅限 Schannel(客户端证书必须由证书存储的路径表达式指定。(不支持加载 PFX;您可以先将其导入存储(。可以使用<store location><store name><thumbprint>
来引用系统证书存储中的证书,例如 "CurrentUserMY934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a"
。指纹通常是 SHA-1 十六进制字符串,可以在证书详细信息中看到。支持以下存储位置:CurrentUser、LocalMachine、CurrentService、Services、CurrentUserGroupPolicy、LocalMachineGroupPolicy、LocalMachineEnterprise。
您也可以在libcurl源代码中检查它,查看文件中schannel_connect_step1
和get_cert_location
的功能lib/vtls/schannel.c
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 通过 OpenSSL C++从证书获取颁发者证书
- 以编程方式获取颁发者证书C++
- 无法在 libcurl 中获取证书位置
- 获取X509代码签名证书的序列号,以不受管理的C/C 签名
- 如何在OpenSSL中获取SSL证书
- 如何从连接的 SSL 会话获取 base64 编码证书 (PEM)
- 获取Openssl证书错误中的错误字符串
- 有没有办法获取 OpenSSL X509 证书名称,该证书名称将在 C++ 中发送到对等方
- 如何以编程方式从火狐浏览器获取证书
- 使用 C++ 在窗口上获取 SSL 证书
- 什么是客户端证书,从哪里获取它,如何使用它连接到服务器?
- 如何使用CryptoAPI在windows7上获取证书信任列表
- 获取POCO HTTPSClientSession发送请求时出错-证书验证失败
- 使用CryptoAPI从PFX证书获取X509数据
- 如何在CryptoAPI中通过证书公钥获取密钥容器的信息
- 如何获取有关客户端证书的信息