如何在将MQTT客户机与Python连接时防止直接访问证书文件

如何在将MQTT客户机与Python连接时防止直接访问证书文件,python,security,mqtt,tls1.2,Python,Security,Mqtt,Tls1.2,我正在使用pho MQTT客户端库成功地连接到AWS。创建mqtt客户机后,通过调用client.tls_set()提供必要的密钥和证书。此方法需要根证书、自有证书和私钥文件的文件路径 一切都很好,生活也很好,除了我现在需要向外部承包商提供此代码,他们不应该直接访问这些证书和关键文件。承包商混合使用PC和macOS系统。在macOS上,我们有我熟悉的keychain,但不知道如何使用python实现这一点-示例/库参考将非常好。在个人电脑上,我不知道解决这个问题的普遍机制是什么 此外,我无法控制

我正在使用pho MQTT客户端库成功地连接到AWS。创建mqtt客户机后,通过调用client.tls_set()提供必要的密钥和证书。此方法需要根证书、自有证书和私钥文件的文件路径

一切都很好,生活也很好,除了我现在需要向外部承包商提供此代码,他们不应该直接访问这些证书和关键文件。承包商混合使用PC和macOS系统。在macOS上,我们有我熟悉的keychain,但不知道如何使用python实现这一点-示例/库参考将非常好。在个人电脑上,我不知道解决这个问题的普遍机制是什么

此外,我无法控制承包商的PC/MAC,也就是说,我无法撤销其钥匙链中的项目。我如何解决这个问题


很抱歉,在安全方面,我是个无赖。不需要提供完整的示例,只需参考要阅读的文章、要遵循的课程和要搜索的关键字就可以了——当然,代码示例也会被愉快地接受。

简短回答:你没有

详细回答:

如果你想让他们能够连接,那么你别无选择,只能给他们证书/私钥来识别设备/用户

您拥有的控制权是向每个承包商发放其唯一的密钥/证书,如果您认为密钥/证书未被使用,请在CA处撤销证书,并让经纪人检查撤销列表

您可以使用密码保护私钥,但同样,您必须将其包含在代码中或将其交给承包商

即使承包商使用的设备具有硬件密钥库(安全元素),您可以将私钥安全地存储在其中,所要做的就是阻止用户提取密钥并将其移动到另一台机器上,他们仍然能够在该机器上使用私钥


最好的缓解措施是确保证书具有较短的生命周期,并控制证书的续订,这意味着如果证书泄漏,那么即使您没有注意到并明确撤销它,它也会很快停止工作。

我很担心这一点,但可以,撤销证书。谢谢你帮我把这件事弄清楚