2016-06-17 7 views
2

Ich möchte überprüfen, ob ein Hostname und ein Port nach einem SSL-Zertifikat. Ich habe diese Funktion erstellt:Python SSL-Zertifikat überprüfen Hostname nach gemeinsamen Namen

Mein Problem ist: Wenn ein Zertifikat abgelaufen ist, ist die Überprüfung fehlgeschlagen. Aber die Ausnahme ist zweideutig:

<class 'ssl.SSLError'> 

Ich kann nicht wissen, ob Fehler Zertifikat fällig ist abgelaufen oder schlecht Trivialname

Wie kann ich nur überprüfen, ob Hostname/Port für Zertifikat gültig ist?

Antwort

0

Genau. SSL-Fehler ist zu allgemein. Ich kämpfte auch damit. Vielleicht möchten Sie diesen Link auschecken.

Verifying SSL certificates in python

Hier ist ein Code nur beantworten.

from OpenSSL import SSL 
from socket import socket 

context = SSL.Context(SSL.TLSv1_METHOD) # Use TLS Method 
context.set_options(SSL.OP_NO_SSLv2) # Don't accept SSLv2 
context.set_verify(SSL.VERIFY_NONE, callback) 
context.load_verify_locations(ca_file, ca_path) 

host = "google.com" 
port = 443 #ssl 
sock = socket() 
ssl_sock = SSL.Connection(context, sock) 
ssl_sock.connect((host, port)) 
ssl_sock.do_handshake() 

def callback(self, conn, certificate, err, depth, valid): 
    # err here is the error code ([List of error codes and what they mean][2]. 
    if err == 62: 
     print("HOSTNAME MISMATCH!!!") 
Verwandte Themen