【发布时间】:2019-10-23 09:58:27
【问题描述】:
我正在编写一个客户端,该客户端通过连接到 Google 服务器的 TCP 套接字发送消息来参与 TLS 1.2 握手。我正在使用 ECDH 密钥交换方法。
我正在尝试使用this 代码导出共享密钥。
我通过 serverKeyExchange 消息接收到密钥并将其存储在缓冲区中,所以 我的问题是:如何从缓冲区生成 EVP_PKEY? 我在this 帖子中找到了一个可能的解决方案并尝试了:
i2d_PublicKey(peerkey, (unsigned char **) &server_pub_key)
但是当我运行代码时,我在这一步中遇到了错误:
/* Provide the peer public key */
if(1 != EVP_PKEY_derive_set_peer(ctx, peerkey)) handleErrors();
这让我觉得我没有成功检索服务器公钥。
有什么建议吗?我怎么知道密钥是否被成功编码?
【问题讨论】:
-
i2d_PublicKey 用于另一个方向,它从 peerkey 中获取 EVP_PKEY,将其转换为 der 并将其存储在 server_pub_key 中。
-
谢谢。那么 d2i_Publickey 是否应该完成这项工作?
-
这取决于存储在 der 缓冲区中的内容。您可以发布用于转换缓冲区的完整代码吗?
-
抱歉这个愚蠢的问题,但是“您用来转换缓冲区的代码”是指我正在尝试执行的转换代码还是将密钥存储到缓冲区?
-
如果您确定缓冲区包含正确格式的数据,那么只有尝试从中创建 EVP_PKEY 的部分。
标签: openssl tls1.2 public-key ecdh