【问题标题】:how client generates public key in ssl connection?客户端如何在 ssl 连接中生成公钥?
【发布时间】:2014-04-09 09:50:30
【问题描述】:

假设我有微不足道的客户端服务器 php ssl 应用程序。
- 服务器生成私钥/公钥。
- 服务器开始监听套接字。
- 客户端连接到套接字:
stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT)

它是如何工作的?客户端即时生成私钥/公钥并将其存储在内存中?

对于浏览器 https,同样的问题,浏览器也是一样的吗?动态生成私钥/公钥?

一般来说:客户端从哪里获取密钥?

【问题讨论】:

    标签: php sockets ssl


    【解决方案1】:
    • 服务器生成私钥/公钥。

    没有。服务器已经安装了公钥和私钥。

    • 服务器开始监听套接字。

    没有。服务器开始监听一个端口。这是通过手段一个套接字来完成的。

    • 客户端连接到套接字: stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT)

    是的。

    它是如何工作的?客户端即时生成私钥/公钥并将其存储在内存中?

    没有。客户端通常没有公钥或私钥,但如果有,它已经安装了。客户端不需要这些来使基本 SSL 工作。

    对于浏览器 https,同样的问题,浏览器也是一样的吗?动态生成私钥/公钥?

    见上文。相同的答案。

    一般来说:客户端从哪里获取密钥?

    我认为您对 SSL 仅使用公共/私有加密技术的普遍误解感到痛苦。它没有。它使用由双方独立协商和计算的对称会话密钥。 PKI 仅在 SSL 中用于对对等方进行身份验证。

    无论如何,您关于在运行时“生成”公钥/私钥对的问题没有任何意义。仅当对等方已经拥有公钥时,密钥对才有用。

    您似乎一直在阅读很多错误信息。那里有很多,众所周知,包括所谓的“Linux 文档项目”。对此的规范参考是 RFC 2246 和后续版本,还有 Eric Rescoria 撰写的关于 SSL 的优秀书籍。

    【讨论】:

    • 进一步补充,服务器证书允许客户端对服务器进行身份验证,而客户端证书也允许服务器对客户端进行身份验证。套接字通常是指IP地址和端口号的组合。
    • 客户端和服务器使用对称加密。但是它们使用非对称加密共享对称密钥。所以两者都需要私钥/公钥来启动 SSL 会话,对吗?
    • @corvax 不,他们不会“使用非对称加密共享对称密钥”。这是另一个都市神话。他们独立计算。正如我在回答中所说。它从不传输,也从不加密。不,正如我也说过的,他们不需要公钥和私钥来启动 SSL 会话。客户端计算并向服务器发送预主密钥,该密钥可能使用服务器的公钥进行加密,但这只是一对密钥的一种使用方式,根据选择的密码套件,还有其他可能发生的方式。
    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 2014-07-31
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多