gpt4 book ai didi

ssl - Boost Asio SSL 客户端握手问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:47 24 4
gpt4 key购买 nike

我一直在尝试实现一个非常基本的 Boost SSL 实现,以尝试学习基础知识。我要与之通信的服务器已经以纯文本形式向我提供了他们的公钥。我已经放入了很多其他代码(异步连接、握手等)。

我首先尝试使用 Boost SSL 流的以下设置在不验证其证书的情况下实现 SSL:

boost::asio::ssl::context ctxt(boost::asio::ssl::context::sslv23);
ctxt.set_verify_mode(boost::asio::ssl::verify_none);

此实现工作正常,我能够连接到服务器。然而,当我尝试实现对等证书的验证时,握手失败了。我尝试使用以下代码:

boost::asio::ssl::context ctxt(boost::asio::ssl::context::sslv23);
ctxt.set_verify_mode(boost::asio::ssl::verify_peer);
ctxt.load_verify_file("peer.crt");

我将包含公钥的“peer.crt”(连同 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 标签)放在目录中我正在运行我的可执行文件。无论出于何种原因,握手现在都失败了,错误代码为 336134278:证书验证失败。我还尝试将验证文件的完整路径放在那里,但没有成功。

我的问题如下:

  1. 我应该在哪里为 load_verify_file 中的验证文件指定文件名?它只是在我运行可执行文件的目录中吗?
  2. 我是否没有正确设置带有对等验证的握手过程?我没有自己的验证回调,因为我假设如果我这样指定,对等验证会自动发生。
  3. 我是否应该通过安装或类似方式以某种方式处理证书?
  4. 是否有更好的方法来调试此功能?我正在使用 VS10 并且只能访问 ipp,所以我无法实际查看正在进行的验证。

感谢任何帮助,谢谢!

最佳答案

  1. 您应该能够使用相对路径或绝对路径。
  2. 您对 set_verify_mode()load_verify_file() 的使用看起来不错。我在自己的代码中正是这样做的。如果您未指定,将使用默认验证回调。
  3. 您不需要“安装”证书。
  4. 我不知道调试 boost::asio SSL 连接的简单方法,但您可以使用 OpenSSL 命令行工具,例如 s_client , 以测试连接。 boost::asio 在底层使用 OpenSSL。

我怀疑您的文件中没有完整的证书链。您可以使用以下命令从您的服务器中提取它们(将 www.google.com:443 替换为您的服务器和端口):

openssl s_client -connect www.google.com:443 -showcerts

如果您只想检查某些证书,例如只有叶证书,您可以使用自己的验证回调。自定义回调的示例以及验证模式和选项的描述在 this page 上.

关于ssl - Boost Asio SSL 客户端握手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23543962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com