我正在研究谷歌云物联网核心,我在在线文档中提供的一个示例(端到端示例)中遇到了一个问题:谷歌云物联网练习
有两个脚本,用于服务器和设备,在运行设备脚本时我遇到了这个问题:
从命令行参数看来,您正在传递 rsa_cert.pem,这是您的 SSL 私钥。正如@class 所说,您需要获取谷歌根证书(wget https://pki.google.com/roots.pem),然后将路径传递给下载的roots.pem 以获取--ca_certs 参数。
Traceback (most recent call last):
File "cloudiot_pubsub_example_mqtt_device.py", line 249, in <module>
main()
File "cloudiot_pubsub_example_mqtt_device.py", line 213, in main
client.connect(args.mqtt_bridge_hostname, args.mqtt_bridge_port)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line
768, in connect
return self.reconnect()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line
927, in reconnect
sock.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 788, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
(_ssl.c:581)
您的防火墙(例如 Cloud Shell Machine)可能阻止 Python 通过端口 8883 进行连接。您可以尝试cloudiot_pubsub_example_mqtt_device.py
使用端口设置为 443 来调用脚本,例如
python <your_existing_parameters> --mqtt_bridge_port=443
您可能还想尝试使用HTTP 设备示例发布消息,因为它也不使用端口 8883,这可能在您的网络上被阻止。
在我的测试中,我只能在将端口设置为 443 后从 Google Cloud Shell 运行练习,希望这可以为您解决问题。
注意如果您在验证服务器证书时遇到问题,您需要通过调用以下方式下载 Google 根证书:
wget https://pki.google.com/roots.pem
更新您可能还想尝试将虚拟环境中的 Python 版本设置为 Python 2,方法是将虚拟环境设置为:
virtualenv env --python=python2