【问题标题】:ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failedssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败
【发布时间】:2021-10-08 20:39:53
【问题描述】:

一段时间以来,我一直在尝试连接代理。但是当我使用 dns 时出现以下错误:ssl.SSLCertVerificationError:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'ec2-x-x-x-x.us-east-2.compute.amazonaws.com'. (_ssl.c:1131) 当我使用 IP 地址时,我得到这个:Error ! Result code 5 这是我的代码:

import paho.mqtt.client as mqtt

devEUI = "8CF9572000023509"
appsKey = "6C1E294550045DCF651F4A33F2C01594"
appKey = "2B7E151628AED2A6ABF7158809CF4F3C"
devAddr = "005C0591"
MQTT_HOST = "ec2-x-x-x-x.us-east-2.compute.amazonaws.com"
BROKER_PORT = 2883
MQTT_KEEPALIVE_INTERVAL = 45


def on_log(client,userdata,level,buf):
    print("log: ",buf)

def on_connect(client, userdata, flags, rc):  
    if int(rc) == 0:
        print("Succesful connection")
        client.subscribe("user/3/device/8cf9572000023509/uplink") 
    print("Error ! Result code {}".format(rc)) 

def on_message(client, userdata, msg):
    print("ok")
   
client = mqtt.Client(client_id="",clean_session=True,userdata=None,transport="tcp")

client.tls_set(ca_certs="caCert.pem")

client.username_pw_set(username="xxxx",password="xxxxxxx")

client.on_log = on_log

  # Define callback function for successful connection

client.connect(MQTT_HOST,BROKER_PORT,MQTT_KEEPALIVE_INTERVAL)
client.on_message = on_message
client.on_connect = on_connect


client.loop_forever()

证书有效。我该如何解决这个问题?

【问题讨论】:

    标签: python certificate ssl-certificate mqtt paho


    【解决方案1】:

    证书有效

    可能是这样的;但它对“ec2-x-x-x-x.us-east-2.compute.amazonaws.com”有效吗?你得到的错误基本上是说“我向 ec2-xxxx.us-east-2.compute.amazonaws.com 索要它的证书;它给了我一个有效的证书,但它的主机名不同(例如 bad.hacker.com)所以我不会相信它!”。

    对于测试,您可以使用tls_insecure_set() 选项忽略它(请参阅the docs)。但是,您确实需要查看证书并检查通用名称 (CN) 和主题备用名称 (SAN)(请参阅 this answer)。

    您在使用 IP 连接时收到 Error ! Result code 5 的事实使我怀疑证书是使用 IP 地址作为 SAN 创建的(因此,当您使用 IP 连接时,证书验证部分正在工作)。 Error 5 是“拒绝连接,未授权”,因此您可能需要检查您的用户名/密码(和代理配置)。

    【讨论】:

    • 我的合作者告诉我问题出在我的代码上。我分享的代码中是否存在不良做法或问题?
    • 您的代码并没有真正做太多事情,主要是添加了 TLS 的 example。您应该在连接之前设置回调,但这不是您当前的问题(因为您的代码不会到达那个点)。
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2021-09-28
    • 2016-11-26
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2017-06-01
    相关资源
    最近更新 更多