【发布时间】:2017-10-13 14:40:48
【问题描述】:
我知道在正常的 SSL 握手过程中,客户端收到服务器的证书并进行验证,然后使用服务器的公钥加密会话密钥。
我想在 Linux 上用 C 语言编写一个 SSL 客户端。在 SSL 握手期间,它不必等待服务器的证书,它会发送使用之前已经下载的服务器公钥加密的会话密钥。
我正在学习如何使用 OpenSSL,这里只需要握手部分。
感谢关注。为什么要这样做? ISP 或网关可以审查证书并根据证书中的名称阻止连接。
【问题讨论】:
-
为什么?你如何告诉服务器不要发送证书?您如何处理更改的证书?对我来说听起来是个坏主意,这可能是XY problem?
-
为了做到这一点,您需要访问客户端和服务器代码,并且一旦实现,此握手将仅在您的客户端和服务器之间起作用,即服务器无法与任何其他通信客户。
-
"客户端如何使用预存的服务器证书进行 SSL 握手?" 直接使用,忽略服务器发送给客户端的内容?
-
"...然后使用服务器的公钥加密会话密钥" - 不会再太久了。 TLS 1.3 中删除了 RSA 密钥传输。唯一可用的将是密钥协议方案,例如短暂的 Diffie-Hellman。现在大多数配置良好的 TLS 1.0-TLS 1.2 服务器只提供临时 Diffie-Hellman。
-
"...我想在 Linux 上用 C 语言编写 SSL 客户端" - 请参阅 OpenSSL wiki 上 TLS Client 的示例代码。
标签: c openssl ssl-certificate handshake