Пример #1
0
    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()
Пример #2
0
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()
Пример #3
0
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()
Пример #4
0
    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()
Пример #5
0
    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()
Пример #6
0
    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()