【问题标题】:Which X.509 certificate to use for NodeMCU SSL connections?哪个 X.509 证书用于 NodeMCU SSL 连接?
【发布时间】:2020-01-30 21:39:53
【问题描述】:

哇,SSL 身份验证是压倒性的!

我正在使用 NodeMCU 设备 (ESP8266) 设备通过 MQTT 协议安全地连接到 Microsoft Azure IoT Hub。

Microsoft 提供了使用自签名 X.509 证书授权客户端的功能。

这里有详细解释:Using X.509 Certificates with IoT Hub

我遵循了 Microsoft Azure 给出的示例,使用 OpenSSL 生成我的自签名 X.509 证书。

我尝试使用示例 Python 脚本作为客户端测试连接,使用我的新证书,效果很好。所以我知道这个过程是成功的,因为它已经过测试和工作,我可以发布和订阅我的 IoT 中心。

为了让 NodeMCU 设备作为客户端连接到 IoT 中心,我需要加载证书以进行身份​​验证。 NodeMCU 提供了将单个 CA 证书(PEM 格式)加载到操作系统中的工具。

这在此处记录:NodeMCU TLS Documentation

问题是,我应该使用哪个证书?

我从 OpenSSL 输出中尝试了一些组合,但似乎都没有成功握手。在这个阶段,我正在探索和希望,并且可以从了解他们的东西的人那里获得一些意见。

令人鼓舞的消息是 NodeMCU 将证书识别为 X.509 证书,但验证失败。所以这让我相信我加载了不正确的证书......

-0x2700 MBEDTLS_ERR_X509_CERT_VERIFY_FAILED

证书验证失败,例如CRL、CA 或签名检查失败。

【问题讨论】:

    标签: azure openssl certificate x509 nodemcu


    【解决方案1】:

    您需要在 NodeMCU 端使用 RSA 客户端证书和私钥来使用 X.509 身份验证对客户端进行身份验证。

    您可以将 PEM 格式的证书和私钥放在 NodeMCU 闪存中,然后将它们加载到 SRAM 中。最好将证书和私钥包含在“EOF(”“)EOF”标签中。

    希望您使用 ESP8266 的 Arduino 内核,您可以使用 BearSSL 为传输层格式化证书文件并与 WiFiClientSecure 对象关联,如下所示:

    BearSSL::WiFiClientSecure espClient;
    
    BearSSL::X509List serverCertList(getCertificate());
    BearSSL::PrivateKey serverPrivKey(getPrivateKey());
    espClient.setClientRSACert(&serverCertList, &serverPrivKey);
    

    您应该定义 getCertificate() 和 getPrivateKey() 方法以从闪存读取证书(或在此处传递包含 PEM 格式证书和私钥的字符数组)。在此之后,如果您的证书和私钥属于有效链,您将能够向服务器验证客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多