0

Ich schreibe einen kleinen SSL-Proxy-Server und erhalten ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:661) von einem Android-App-Client, aber kein Browser. Ich habe ssl.CERT_NONE gesetzt. Hier ist mein Testcode:unerwartete pyssl Zertifikat Fehler

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) 

Ist dies wegen Zertifikat auf dem Android App Pinning oder ich mache etwas falsch gemacht?

Antwort

0

Ich habe gesetzt ssl.CERT_NONE

Dies hat keinen Einfluss, wie der Client überhaupt das Serverzertifikat überprüft. Der Server kann den Client nicht anweisen, das Zertifikat nicht zu überprüfen, und es wäre ein ernsthaftes Sicherheitsproblem, wenn der Server dies tun könnte.

SSLV3_ALERT_CERTIFICATE_UNKNOWN ... von einem Android-App-Client, aber kein Browser.

Es ist unbekannt, welche Art von Zertifikat Sie hier verwenden. Wenn es sich um eine selbstsignierte Signatur handelt, haben Sie diese wahrscheinlich einmal als vertrauenswürdig zum Browser hinzugefügt oder eine explizite Ausnahme hinzugefügt - dies jedoch nicht für die Android-App getan. Wenn es sich um ein Zertifikat handelt, das von einer öffentlichen Zertifizierungsstelle ausgestellt wurde, fehlen Ihnen wahrscheinlich die Kettenzertifikate. Desktop-Browser arbeiten häufig mit diesem serverseitigen Problem zusammen, während dies bei den meisten anderen Clients nicht der Fall ist.

+0

Ich habe ein selbstsigniertes Zertifikat verwendet. Ich habe es auch meinem Browser und meinem Android-Handy hinzugefügt. Der Grund, warum ich hier verwirrt bin, ist, wie ich gegoogelt habe 'SSLV3_ALERT_CERTIFICATE_UNKNOWN' bedeutet, dass mein Python-Code das Client-Zertifikat zurückweist und nicht umgekehrt. – logicalway

+0

@logicalway: Nein, der Client erhält das Serverzertifikat, mag es nicht und sendet diesen Alarm zurück an den Server, der dann den Handshake abbricht und den Alarm anzeigt, den er bekommen hat. Somit mag Ihr Android-Client das Zertifikat nicht, aber es ist unbekannt warum - zu wenige Informationen über den Client und das Zertifikat und wie Sie es hinzugefügt haben. –