如何告诉 curl 使用来自 Windows 证书存储区的一个客户端证书?

如何告诉 curl 使用来自 Windows 证书存储区的一个客户端证书?

免责声明:我是 curl 的新手。

当我去https://server.cryptomix.com/secure/使用 Chrome 时,Chrome 会要求我从我 Windows 证书存储区中当前拥有的几个客户端证书中选择一个。

Chrome 询问我

一旦我选择了证书,cryptomix.com 就很高兴了。

cryptomix 快乐

很好。现在我有 Windows 自带的 curl 了

c:\Windows\System32>curl --version
 curl 7.83.1 (Windows) libcurl/7.83.1 Schannel Release-Date: 2022-05-13 Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets

但是,如果我只是卷曲https://server.cryptomix.com/secure/cryptomix 不高兴。

c:\Windows\System32>curl https://server.cryptomix.com/secure/
<html>
<head>
<title>TLS Client Authentication Test</title>

<style type="text/css">
  SPAN.sslsuccess {font-weight: bolder; color : green}
  SPAN.sslerror {font-weight: bolder; color : red}
</style>
</head>
<br><span class="sslerror">Error: No TLS client certificate presented</span>

</body>
</html>

我如何告诉 curl 使用我的 Windows 证书存储区中的某个客户端证书?

答案1

使用 SCHANNEL (windows SSL) 时必须指定路径和指纹目标证书。

(仅限 Schannel)客户端证书必须通过证书存储的路径表达式指定。(不支持加载 PFX;您可以先将其导入存储)。您可以使用“<存储名称><指纹>”引用系统证书存储中的证书,例如“CurrentUser\MY\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a”。指纹通常是 SHA-1 十六进制字符串,您可以在证书详细信息中看到它。支持以下存储位置:CurrentUser、LocalMachine、CurrentService、Services、CurrentUserGroupPolicy、LocalMachineGroupPolicy、LocalMachineEnterprise。

请记住,您可能必须转义路径中的反斜杠“\”字符,例如“\\”。

您可以通过导航到商店中的证书并转到“详细信息”选项卡来找到证书指纹:

在此处输入图片描述

相关内容