【发布时间】:2021-02-09 21:07:33
【问题描述】:
我开始“玩” curl 和 Ssl。我正在使用客户端证书,并且正在使用 curl 将 api 请求发送到服务器。在 curl 命令中,我指定了客户端证书、私钥文件和密码。为什么我需要使用 --key 选项指定私钥?我是将文件发送到服务器还是只是通知 curl 如何解密接收到的数据的一种方式?
【问题讨论】:
标签: curl openssl ssl-certificate
我开始“玩” curl 和 Ssl。我正在使用客户端证书,并且正在使用 curl 将 api 请求发送到服务器。在 curl 命令中,我指定了客户端证书、私钥文件和密码。为什么我需要使用 --key 选项指定私钥?我是将文件发送到服务器还是只是通知 curl 如何解密接收到的数据的一种方式?
【问题讨论】:
标签: curl openssl ssl-certificate
您没有将您的私钥发送到服务器。使用key,以便服务器可以验证您提供的客户端证书确实是发给您的,并且您拥有相应的私钥。它用于对服务器发送的一条数据进行签名。仅传输此签名数据而不传输密钥。然后服务器使用您的证书(由服务器信任的 CA 签名)解密数据并确认您拥有相应的私钥。 (有关 TLS 如何在 TLS 握手期间检查客户端证书的更多信息,请参阅 this answer 或 this shorter one one)
这类似于您需要向浏览器提供通常是 PKCS#12 文件的方式,以便访问需要客户端证书身份验证的网页。 PCKS#12 是一种存档格式,包含捆绑的证书和私钥。 curl 也允许您在--cert 选项中使用此格式,来自man page:
-E, --cert
(TLS) 告诉 curl 在使用 HTTPS、FTPS 或其他基于 SSL 的协议获取文件时使用指定的客户端证书文件。如果使用安全传输,证书必须是 PKCS#12 格式,如果使用的是 PEM 格式 使用任何其他引擎。
【讨论】:
curl 将使用密码来解密客户端私钥,然后再使用它来加密数据,然后将其发送到服务器。
ssh-agent 将解密的 SSH 私钥存储在内存中。这样您就不必每次使用 SSH 连接到远程主机时都输入密码。