def check_intermediate_certificate(self): print_h1( "Diese Funktion überprüft ein Intermediate-Zertifikat und deckt die Anforderungen aus Kapitel 2.2 der Checkliste ab." ) print_h2( "Drucke das subject des Zertifikats. Dies dient nur der Übersicht") self.print_subject() print_h2( "Überprüfe den öffentlichen Schlüssel des Zertifkats (Anforderung 2.2.1)" ) self.check_certificate_key() if self.is_cert_ca(): print_h2("Überprüfe den Signaturalgorithmus (Anforderung 2.2.2)") self.check_signature_algorithm() if self.is_cert_ca(): print_h2("Überprüfe auf Wildcards (Anforderung 2.2.3)") self.check_for_wildcards() if self.is_cert_ca(): print_h2( "Überprüfe Rückrufinformationen und AuthorityInfoAccess (Anforderung 2.1.4)" ) self.check_cert_for_crl() self.check_cert_for_aia() if self.is_cert_ca(): print_h2( "Überprüfe auf BasicConstraint Extension (Anforderung 2.2.5)") self.check_basic_constraint() if self.is_cert_ca(): print_h2("Überprüfe keyUsageExtension (Anforderung 2.2.6)") self.check_cert_for_keyusage()
def main(hostname, port, ca_file, clientcert_file, server_certificates, proxy, insecure): print_h1("Überprüfe Systemvorraussetzungen") if which('openssl')==None: logger.error('Could not find openssl in the path. Please install openssl and add it to the path. The call this script again. Will exit now.') exit (1) if server_certificates is None and proxy is not None: if ssl.OPENSSL_VERSION_NUMBER < 9999999999: # TODO: ab welcher version von openssl wird --proxy unterstuetz logger.error('Your version of OpenSSL does not support proxy setting. Please install OpenSSL x.x.x or later or try --servercertificates argument.') exit(1) if ca_file is not None: if os.path.exists(ca_file): logger.info("Using the following ca certificate file: "+ca_file) else: logger.error("ca file not found") sys.exit() else: logger.info("No dedicated ca_file provided. Using system ca.") if clientcert_file is not None: if os.path.exists(clientcert_file): logger.info("Using the following client certificate file: "+clientcert_file) else: logger.info("client certificate file not found.") sys.exit() if which('sslyze')==None: logger.error('Could not find sslyze in the path. Please install sslyze and add it to the path. The call this script again. Will exit now.') exit (1) svr=Server(hostname,port,ca_file,clientcert_file,server_certificates, split_proxy(proxy), insecure) svr.test_server_for_protocol() svr.read_certificates(server_certificates) if len(svr.certs)<1: logger.error("Zertifikate konnten nicht gelesen werden.") exit (1) svr.certs[0].check_leaf_certificate() if len(svr.certs)>1: svr.certs[-1].check_root_certificate() if len(svr.certs)>2: for crt in svr.certs[1:-1]: crt.check_intermediate_certificate()
def main(hostname, port, ca_file, server_certificates, proxy): print_h1("Überprüfe Systemvorraussetzungen") if which('openssl') == None: logger.error( 'Could not find openssl in the path. Please install openssl and add it to the path. The call this script again. Will exit now.' ) exit(1) if server_certificates is None and proxy is not None: if ssl.OPENSSL_VERSION_NUMBER < 9999999999: # TODO: ab welcher version von openssl wird --proxy unterstuetz logger.error( 'Your version of OpenSSL does not support proxy setting. Please install OpenSSL x.x.x or later or try --servercertificates argument.' ) exit(1) if ca_file is None: logger.info("No dedicated ca_file provided. Using default vaule.") ca_file = ssl.get_default_verify_paths().openssl_cafile logger.info("Using the follwing ca_file: " + ca_file) if which('sslyze') == None: logger.error( 'Could not find sslyze in the path. Please install sslyze and add it to the path. The call this script again. Will exit now.' ) exit(1) svr = Server(hostname, port, ca_file, server_certificates, split_proxy(proxy)) svr.test_server_for_protocol() svr.read_certificates(server_certificates) svr.certs[0].check_leaf_certificate() if len(svr.certs) > 1: svr.certs[-1].check_root_certificate() if len(svr.certs) > 2: for crt in svr.certs[1:-1]: crt.check_intermediate_certificate()
def check_root_certificate(self): print_h1( "Diese Funktion überprüft das CA-Zertifikat und deckt die Anforderungen aus Kapitel 2.2 der Checkliste ab." ) print_h2( "Drucke das subject des Zertifikats. Dies dient nur der Übersicht") self.print_subject() print_h2( "Überprüfe den öffentlichen Schlüssel des Zertifkats (Anforderung 2.2.1)" ) self.check_certificate_key() print_h2("Überprüfe auf Wildcards (Anforderung 2.2.3)") self.check_for_wildcards() print_h2("Überprüfe auf BasicConstraint Extension (Anforderung 2.2.5)") self.check_basic_constraint() print_h2("Überprüfe keyUsageExtension (Anforderung 2.2.6)") self.check_cert_for_keyusage()
def check_leaf_certificate(self): print_h1( "Diese Funktion überprüft das Server-Zertifikat und deckt die Anforderungen aus Kapitel 2.1 der Checkliste ab." ) print_h2( "Drucke das subject des Zertifikats. Dies dient nur der Übersicht") self.print_subject() print_h2( "Überprüfe den öffentlichen Schlüssel des Zertifkats (Anforderung 2.1.1)" ) self.check_certificate_key() print_h2("Überprüfe den Signaturalgorithmus (Anforderung 2.1.2)") self.check_signature_algorithm() print_h2("Überprüfe auf Wildcards (Anforderung 2.1.3)") self.check_for_wildcards() print_h2( "Überprüfe Rückrufinformationen und AuthorityInfoAccess (Anforderung 2.1.4)" ) self.check_cert_for_crl() self.check_cert_for_aia() print_h2( "Überprüfe ob das Zertifikat gesperrt ist (Anforderung 2.1.5)") self.check_cert_for_revocation() print_h2("Überprüfe keyUsageExtension (Anforderung 2.1.6)") # test für leaf zertifikate self.check_cert_for_keyusage_servercert() print_h2("Überprüfe extendedKeyUsageExtension (Anforderung 2.1.7)") self.check_cert_for_extended_keyusage() print_h2("Überprüfe Sub-Domain Namen (Anforderung 2.1.8)") self.list_alternative_names()
def test_server_for_protocol(self): print_h1("Test die Anforderungen aus Kapitel 2.3") print_h2("Anforderung 2.3.1 Überpreufe die unterstuetzten Protokolle:") self.test_supported_protocols() print_h2( "Anforderung 2.3.2/2.3.3/2.3.4 Überpreufe die unterstuetzten Cipher-Suites:" ) logger.info( "Im Folgenden werden die vom Server unterstützten Cipher-Suites gelistet." ) logger.info( "Unerlaubte Cipher-Suites werden direkt markiert. Allerdings muss aktuelle manuell geprpft werden " ) logger.info( "ob die verpflichtenden cipher-suites umgesetzt sind. Außerdem muss die Priorität der " ) logger.info("Cipher Suites aktuell manuell geprüft werden.") self.test_supported_cipher_suites() print_h1("Teste die Anforderungen aus Kapitel 2.4") print_h2("Anforderung 2.4.1 Überprüfe die ephemeralen Parameter") self.test_key_exchange() print_h1("Teste die Anforderungen aus Kapitel 2.5") print_h2("Anforderung 2.5.1 Überpruefe Session Renegotiation") self.test_session_renegotiation() print_h2("Anforderung 2.5.2 Überpruefe TLS Kompression") self.test_tls_compression() print_h2("Anforderung 2.5.3 Überpruefe auf Heartbeat-Extension") self.test_heartbeat_extension() print_h2("Anforderung 2.5.4 Überpruefe auf truncated_hmac-Extension") self.test_truncated_hmac_extension()