1

我正在编写一个小型 SSL 代理服务器,并不断ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:661)从 android 应用程序客户端而不是浏览器获取。我确实设置了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 应用程序上的证书固定还是我做错了什么?

4

1 回答 1

0

我确实设置了 ssl.CERT_NONE

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

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

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

于 2017-08-31T10:09:12.383 回答