MCPcopy Create free account
hub / github.com/TheSecuredAnalyst/security-suite / run

Method run

modules/webscanner/ssl_analyzer.py:26–116  ·  view source on GitHub ↗

Analyze SSL/TLS configuration.

(self, target: Target)

Source from the content-addressed store, hash-verified

24
25 async def run(self, target: Target) -> ScanResult:
26 """Analyze SSL/TLS configuration."""
27 result = self.create_result(target)
28
29 host = self._extract_host(target.value)
30 port = 443
31 self.logger.info(f"Analyzing SSL/TLS for {host}:{port}")
32
33 try:
34 # Get certificate info
35 cert_info = await self._get_certificate(host, port)
36 if cert_info:
37 result.raw_data["certificate"] = cert_info
38
39 result.add_finding(
40 title="Certificate Information",
41 description=f"Certificate issued to {cert_info.get('subject', 'Unknown')}",
42 severity=Severity.INFO,
43 data=cert_info,
44 )
45
46 # Check expiration
47 if cert_info.get("not_after"):
48 expiry = datetime.fromisoformat(cert_info["not_after"])
49 days_until_expiry = (expiry - datetime.now()).days
50
51 if days_until_expiry < 0:
52 result.add_finding(
53 title="Certificate Expired",
54 description=f"Certificate expired {abs(days_until_expiry)} days ago",
55 severity=Severity.CRITICAL,
56 )
57 elif days_until_expiry < 30:
58 result.add_finding(
59 title="Certificate Expiring Soon",
60 description=f"Certificate expires in {days_until_expiry} days",
61 severity=Severity.MEDIUM,
62 )
63
64 # Check for self-signed
65 if cert_info.get("issuer") == cert_info.get("subject"):
66 result.add_finding(
67 title="Self-Signed Certificate",
68 description="Certificate appears to be self-signed",
69 severity=Severity.MEDIUM,
70 )
71
72 # Check TLS versions
73 tls_versions = await self._check_tls_versions(host, port)
74 result.raw_data["tls_versions"] = tls_versions
75
76 if tls_versions:
77 supported = [v for v, s in tls_versions.items() if s]
78
79 if not supported:
80 result.add_finding(
81 title="No TLS/SSL Configured",
82 description=f"No TLS/SSL listener detected on {host}:{port} - traffic is unencrypted",
83 severity=Severity.HIGH,

Callers 1

scan_sslFunction · 0.95

Calls 7

_extract_hostMethod · 0.95
_get_certificateMethod · 0.95
_check_tls_versionsMethod · 0.95
add_findingMethod · 0.80
completeMethod · 0.80
create_resultMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected