python-3.x - ssl.SSLError : [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl. c:777)

标签 python-3.x ssl websocket qliksense

我目前正在使用 websocket-client 处理 python 到 QlikSense 服务器的连接。对于身份验证,我使用了 Qlik sense 服务器生成的证书。

即使我遵循了此 link 中提到的相同代码逻辑,但仍然出现错误。

from websocket import create_connection

def conn(senseHost, userDirectory, userId, privateKeyPath):

    # self.url = "wss://" + senseHost + ":4747/app/" # invalid
    url = "wss://" + senseHost + ":4747/app"  # valid
    ca = open(privateKeyPath + "root.pem").read()
    cer = open(privateKeyPath + "client.pem").read()
    key = open(privateKeyPath + "client_key.pem").read()
    certs = ({"ca": ca,
              "cert": cer,
              "key": key})
    # import pdb
    # pdb.set_trace()
    # ERROR raised here.
    ws = create_connection(url, sslopt=certs,
                                header={'X-Qlik-User: UserDirectory=%s; UserId=%s' % (userDirectory, userId)})
    session = self.ws.recv()
    return session

# below code has specific perameters.
c = conn("blablah.com","XYZ","ME","path/to/cert/")

我使用 pdb 跟踪了一个错误,

-> ws = create_connection(url,sslopt=certs,header={'X-Qlik-User: UserDirectory=%s; UserId=%s' % (userDirectory, userId)})
(Pdb) n
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)

最佳答案

经过 4 个小时的努力,我找到了解决方案。

def conn(senseHost, userDirectory, userId, privateKeyPath):
    url = "wss://" + senseHost + ":4747/app"  # valid
    certs = ({"ca_certs": privateKeyPath + "root.pem",
              "certfile": privateKeyPath + "client.pem",
              "keyfile": privateKeyPath + "client_key.pem",
              "cert_reqs":ssl.CERT_REQUIRED,
              "server_side": False
              })
    ssl.match_hostname = lambda cert, hostname: True
    ws = create_connection(url, sslopt=certs,
                                header={'X-Qlik-User: UserDirectory=%s; UserId=%s'% (userDirectory, userId)})

关于python-3.x - ssl.SSLError : [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl. c:777),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49257450/

相关文章:

python-3.x - 处理 NaN 的成对距离

java - cfhttp : the trustAnchors parameter must be non-empty

ruby-on-rails - Websocket-rails 无法从模型广播

python - 双向链表——垃圾回收

python - 将 “stdout” 重定向到多个滚动文本小部件?

Python - 使用多个键创建字典,其中值也是字典

php - .htaccess 为特定目录关闭 SSL

tomcat - Apache Tomcat : modify files in conf directory just for one webapp

java - Spring websocket - 来自集群的 sendToUser 无法从备份服务器工作

ssl - 使用 SSL 进行传输时,SignalR 中的 ConnectionToken 是否应该受到保护?