首页 > 解决方案 > ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败

问题描述

我一直在尝试连接到代理一段时间。但是当我使用 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()

证书有效。我怎么解决这个问题?

标签: pythoncertificatessl-certificatemqttpaho

解决方案


证书有效

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

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

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


推荐阅读