【问题标题】:when I need to use SSL private key while making SSL call当我在进行 SSL 调用时需要使用 SSL 私钥时
【发布时间】:2017-03-13 00:09:18
【问题描述】:

对不起,如果这听起来像是转储问题,我一直在阅读很多关于 SSL 握手和 SSL 工作原理的帖子和文档。我对一件事感到困惑,如果有人能澄清我,那就太好了。

我知道私钥是保密的。但是我已经看到通过在请求中指定私钥进行了一些 GET/POST 调用(使用 curl 或 wget), 例如,如果我的服务器 DNS 是 example.com,并且我正在使用 wget 进行 SSL 调用:

wget --ca-cert=/etc/certs/ca.crt --certificate=/etc/certs/cert.crt --private-key=/etc/cert/private/privatekey.key --header="Content-Type: application/json" --post-data='{"key":"val"}' https://example.com/test

但是当我们通过浏览器打开 SSL 网页时(例如,通过 chrome 打开 gmail),我们永远不必使用私钥,或者说浏览器不知道私钥。在握手期间,浏览器获取服务器公共证书和 CA,然后加密随机数以发送回服务器以打开 SSL 会话。

我知道我错过了一些愚蠢的东西并且感到困惑。有人能告诉我什么时候必须在 SSL 请求中使用私钥吗?

【问题讨论】:

    标签: ssl curl https wget


    【解决方案1】:

    当你想要Mutual Authentication时使用它。以及要求服务提供商支付证书等费用的标准服务器身份验证,并避免 MITM 攻击。

    客户端身份验证向服务器证明客户端的身份。然而,这给用户带来了通常不合理的负担,并且通过用户名/密码或客户端的 oauth 令牌等来满足。

    客户端身份验证可能是可选的并回退到其他方法。

    【讨论】:

    • 所以这是否意味着如果我评论 ssl_verify_client 行(在 nginx 或 apache2 中的类似内容)或关闭 ssl_verify_client,我将不再需要在使用 wget 进行上述 ssl 调用时使用密钥?
    • 是的,尽管您的问题尚不清楚是否仅适用于同一端点的浏览器。如果是这种情况,您可能只需要运行 wget --header="Content-Type: application/json" --post-data='{"key":"val"}' https://example.com/test 但如果您正在测试一个确实强制执行客户端身份验证的端点,那么您建议的更改将是合适的。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2019-11-22
    相关资源
    最近更新 更多