【问题标题】:What means --key in cUrlcUrl 中的 --key 是什么意思
【发布时间】:2021-02-09 21:07:33
【问题描述】:

我开始“玩” curl 和 Ssl。我正在使用客户端证书,并且正在使用 curl 将 api 请求发送到服务器。在 curl 命令中,我指定了客户端证书、私钥文件和密码。为什么我需要使用 --key 选项指定私钥?我是将文件发送到服务器还是只是通知 curl 如何解密接收到的数据的一种方式?

【问题讨论】:

    标签: curl openssl ssl-certificate


    【解决方案1】:

    您没有将您的私钥发送到服务器。使用key,以便服务器可以验证您提供的客户端证书确实是发给您的,并且您拥有相应的私钥。它用于对服务器发送的一条数据进行签名。仅传输此签名数据而不传输密钥。然后服务器使用您的证书(由服务器信任的 CA 签名)解密数据并确认您拥有相应的私钥。 (有关 TLS 如何在 TLS 握手期间检查客户端证书的更多信息,请参阅 this answerthis shorter one one

    这类似于您需要向浏览器提供通常是 PKCS#12 文件的方式,以便访问需要客户端证书身份验证的网页。 PCKS#12 是一种存档格式,包含捆绑的证书和私钥。 curl 也允许您在--cert 选项中使用此格式,来自man page

    -E, --cert
    (TLS) 告诉 curl 在使用 HTTPS、FTPS 或其他基于 SSL 的协议获取文件时使用指定的客户端证书文件。如果使用安全传输,证书必须是 PKCS#12 格式,如果使用的是 PEM 格式 使用任何其他引擎。

    【讨论】:

    • 所以如果我理解正确......在证书(在客户端)中有服务器公钥和一些使用客户端私钥签名的信息。服务器将收到证书,使用服务器私钥解密消息并从解密的消息中检查签名.. 对吗?
    • 对于客户端身份验证,服务器将使用证书中的公钥解密消息,该证书由客户端与加密消息一起发送。并且证书必须由服务器信任的 CA 签名,以便服务器知道它可以信任该客户端。与此同时,客户端发送由服务器公钥签名的数据,由服务器私钥解密。此数据是建立 TLS 连接的一部分,并且在每次 TLS 握手中都是相同的。
    • 为什么我需要指定密码?谁将使用它,何时使用?谢谢
    • 这是解密客户端私钥的密码。默认情况下,openssl 在新的公钥/私钥生成期间要求输入密码。您可以将其留空,这样您就不需要提供密码,但私钥会以未加密的形式存储在您的磁盘上。 curl 将使用密码来解密客户端私钥,然后再使用它来加密数据,然后将其发送到服务器。
    • 您可能熟悉用于 SSH 密钥的密码。在 SSH 密钥对生成期间,系统会要求您输入密码。稍后,当您连接到远程服务器时,系统将提示您输入密码以解密 SSH 私钥并建立连接。在 SSH 用例中,您可以在登录会话运行时使用 ssh-agent 将解密的 SSH 私钥存储在内存中。这样您就不必每次使用 SSH 连接到远程主机时都输入密码。
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2013-03-09
    • 2014-06-18
    • 1970-01-01
    • 2018-11-16
    • 2010-10-29
    相关资源
    最近更新 更多