@@ -490,7 +490,7 @@ def check_pubkey(certificates: List[Certificate], mode: ChecksMode):
490490 message = f"{ common_name } : { failed_key_type } -{ key_size } key_size"
491491 if curve :
492492 message += f", curve: { curve } "
493- if public_key .curve in CERT_EC_CURVES_PHASE_OUT :
493+ if isinstance ( public_key , EllipticCurvePublicKey ) and type ( public_key .curve ) in CERT_EC_CURVES_PHASE_OUT :
494494 phase_out_pubkey .append (message )
495495 else :
496496 bad_pubkey .append (message )
@@ -599,15 +599,17 @@ def check_mail_tls(result: ServerScanResult, all_suites: List[CipherSuitesScanAt
599599 protocol_evaluation = TLSProtocolEvaluation .from_protocols_accepted (prots_accepted )
600600 fs_evaluation = TLSForwardSecrecyParameterEvaluation .from_ciphers_accepted (ciphers_accepted )
601601 cipher_evaluation = TLSCipherEvaluation .from_ciphers_accepted (ciphers_accepted )
602+ server_connectivity_info = ServerConnectivityInfo (
603+ server_location = result .server_location ,
604+ network_configuration = result .network_configuration ,
605+ tls_probing_result = result .connectivity_result ,
606+ )
602607 cipher_order_evaluation = test_cipher_order (
603- ServerConnectivityInfo (
604- server_location = result .server_location ,
605- network_configuration = result .network_configuration ,
606- tls_probing_result = result .connectivity_result ,
607- ),
608+ server_connectivity_info ,
608609 prots_accepted ,
609610 cipher_evaluation ,
610611 )
612+ key_exchange_hash_evaluation = test_key_exchange_hash (server_connectivity_info )
611613 cert_results = cert_checks (result .server_location .hostname , ChecksMode .MAIL )
612614
613615 # HACK for DANE-TA(2) and hostname mismatch!
@@ -646,7 +648,8 @@ def check_mail_tls(result: ServerScanResult, all_suites: List[CipherSuitesScanAt
646648 else None ,
647649 compression_score = (
648650 scoring .WEB_TLS_COMPRESSION_BAD
649- if result .scan_result .tls_compression .result .supports_compression
651+ if result .scan_result .tls_compression .result
652+ and result .scan_result .tls_compression .result .supports_compression
650653 else scoring .WEB_TLS_COMPRESSION_GOOD
651654 ),
652655 dh_param = fs_evaluation .max_dh_size ,
@@ -664,8 +667,8 @@ def check_mail_tls(result: ServerScanResult, all_suites: List[CipherSuitesScanAt
664667 if result .scan_result .tls_1_3_early_data .result .supports_early_data
665668 else scoring .WEB_TLS_ZERO_RTT_GOOD
666669 ),
667- kex_hash_func = KexHashFuncStatus . good ,
668- kex_hash_func_score = scoring . WEB_TLS_KEX_HASH_FUNC_OK ,
670+ kex_hash_func = key_exchange_hash_evaluation . status ,
671+ kex_hash_func_score = key_exchange_hash_evaluation . score ,
669672 )
670673 results .update (cert_results )
671674 return results
@@ -768,10 +771,13 @@ def check_web_tls(url, af_ip_pair=None, *args, **kwargs):
768771 if result .scan_result .session_renegotiation .result .is_vulnerable_to_client_renegotiation_dos
769772 else scoring .WEB_TLS_CLIENT_RENEG_GOOD
770773 ),
771- compression = result .scan_result .tls_compression .result .supports_compression ,
774+ compression = result .scan_result .tls_compression .result .supports_compression
775+ if result .scan_result .tls_compression .result
776+ else None ,
772777 compression_score = (
773778 scoring .WEB_TLS_COMPRESSION_BAD
774- if result .scan_result .tls_compression .result .supports_compression
779+ if result .scan_result .tls_compression .result
780+ and result .scan_result .tls_compression .result .supports_compression
775781 else scoring .WEB_TLS_COMPRESSION_GOOD
776782 ),
777783 dh_param = fs_evaluation .max_dh_size ,
@@ -842,7 +848,7 @@ def raise_sslyze_errors(result: ServerScanResult) -> None:
842848 """
843849 last_error_trace = None
844850 for scan_result in vars (result .scan_result ).values ():
845- error_trace = getattr (scan_result , "error_trace" )
851+ error_trace = getattr (scan_result , "error_trace" , None )
846852 if error_trace :
847853 last_error_trace = error_trace
848854 log .info (f"TLS scan on { result .server_location } failed: { error_trace } : { '' .join (error_trace .format ())} " )
@@ -1013,7 +1019,7 @@ def check_supported_tls_versions(server_connectivity_info: ServerConnectivityInf
10131019 try :
10141020 ssl_connection .connect ()
10151021 supported_tls_versions .append (tls_version )
1016- except (ConnectionToServerFailed , OpenSSLError ) as exc :
1022+ except (ConnectionToServerFailed , OpenSSLError , TlsHandshakeTimedOut ) as exc :
10171023 log .debug (
10181024 f"Server { server_connectivity_info .server_location .hostname } "
10191025 f"/{ server_connectivity_info .server_location .ip_address } "
0 commit comments