首页 > 解决方案 > 如何在 Windows C++ 中复制 python 的`ssl.get_default_context()`?

问题描述

我的最终目标是将一个简单的脚本移植mqtt-paho-python到 C++ 中,以便在大型应用程序中集成。

使用 paho 的 python 示例非常简单:

client = mqtt.Client(transport="websockets")
client.username_pw_set(settings['username'], password=settings['password'])
client.tls_set_context(context=ssl.create_default_context())

他们设置默认的 TLS 上下文,使用用户名和密码进行身份验证,然后连接。这很好用!

但是,现在我想尝试使用paho-mqtt-cpp. 从他们的异步示例中借用的基本示例如下所示:

mqtt::connect_options connOpts;
connOpts.set_keep_alive_interval(20);
connOpts.set_clean_session(true);
connOpts.set_user_name("username");
connOpts.set_password("password123");

mqtt::ssl_options sslOpts;
connOpts.set_ssl(sslOpts);

mqtt::async_client client("wss://test.mosquitto.org:8081", "myClient");

callback cb(client, connOpts);
client.set_callback(cb);

但是,ssl.get_default_context()在 python 的 ssl 库中似乎为我做了很多在 C++ 中没有复制的设置;来自python自己的文档:

“对于客户端使用,如果您对安全策略没有任何特殊要求,强烈建议您使用 create_default_context() 函数来创建您的 SSL 上下文。它将加载系统的受信任 CA 证书,启用证书验证和主机名检查,并尝试选择合理安全的协议和密码设置。”

我尝试过的大多数 WSS 连接都需要证书,并且create_default_context()似乎能够提供正确的证书而无需我自己生成任何证书。

所以我的问题是:(1) 我可以用于安全连接的 Windows 系统默认证书在哪里?(2) 我需要手动配置哪些其他设置create_default_context()可能会在后台为我设置?

我试过查看source,但很难辨别操作系统特定的选项在哪里。

标签: pythonc++sslwebsocketmqtt

解决方案


推荐阅读