【问题标题】:unexpected pyssl certificate error意外的 pyssl 证书错误
【发布时间】:2018-02-09 05:02:09
【问题描述】:

我正在编写一个小型 SSL 代理服务器,并不断从 android 应用程序客户端而不是浏览器获取 ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:661)。我确实设置了ssl.CERT_NONE。这是我的测试代码:

SSLcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
SSLcontext.load_cert_chain('server.crt', 'server.key')
SSLcontext.verify_mode = ssl.CERT_NONE
SSLcontext.check_hostname = False

s = socket.socket()
s.bind(('127.0.0.1', 443))
s.listen(5)

c = s.accept()[0]
c = SSLcontext.wrap_socket(c, server_side = True)
print c.recv(1024)

这是因为 Android 应用上的证书固定还是我做错了什么?

【问题讨论】:

    标签: android python ssl reverse-engineering certificate-pinning


    【解决方案1】:

    我确实设置了 ssl.CERT_NONE

    这根本不影响客户端验证服务器证书的方式。服务器无法指示客户端不验证证书,如果服务器可以这样做,将是一个严重的安全问题。

    SSLV3_ALERT_CERTIFICATE_UNKNOWN ...来自 Android 应用客户端,但不是浏览器。

    不知道您在这里使用的是哪种证书。如果这是一个自签名的,您可能已经将其添加为浏览器信任或添加了一个明确的例外 - 但您没有为 Android 应用程序执行此操作。如果这是由公共 CA 颁发的证书,那么您可能缺少链证书。桌面浏览器通常可以解决这个服务器端问题,而大多数其他客户端则不能。

    【讨论】:

    • 我使用了自签名证书。我还将它添加到我的浏览器和我的安卓手机中。我在这里感到困惑的原因是我用谷歌搜索了SSLV3_ALERT_CERTIFICATE_UNKNOWN,这意味着我的python代码拒绝了客户的证书,而不是相反。
    • @logicalway: 不,客户端获取服务器证书,不喜欢它并将此警报发送回服务器,然后服务器中止握手并显示它收到的警报。因此不知何故,您的 Android 客户端不喜欢该证书,但不知道为什么 - 关于客户端和证书以及您如何添加它的信息太少。
    猜你喜欢
    • 2021-09-27
    • 2016-07-18
    • 1970-01-01
    • 2020-05-02
    • 2018-07-07
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多