(self, domain)
| 12125 | return out |
| 12126 | |
| 12127 | def _scan_tls_chain(self, domain): |
| 12128 | out = {} |
| 12129 | if not domain: |
| 12130 | return out |
| 12131 | try: |
| 12132 | r = requests.get( |
| 12133 | f"https://api.ssllabs.com/api/v3/analyze?host={urllib.parse.quote(domain)}&fromCache=on&all=done", |
| 12134 | timeout=12, |
| 12135 | headers={"User-Agent": "Mozilla/5.0"} |
| 12136 | ) |
| 12137 | if r.status_code != 200: |
| 12138 | out["TLS Chain"] = f"SSLLabs HTTP {r.status_code}" |
| 12139 | return out |
| 12140 | data = self._safe_response_json(r) |
| 12141 | if not isinstance(data, dict): |
| 12142 | out["TLS Chain"] = "Dati SSLLabs non validi" |
| 12143 | return out |
| 12144 | if data.get("status") and data.get("status") not in ("READY", "READY",): |
| 12145 | out["TLS Scan Stato"] = str(data.get("status")) |
| 12146 | return out |
| 12147 | endpoints = data.get("endpoints") or [] |
| 12148 | if not endpoints: |
| 12149 | out["TLS Scan Stato"] = "Nessun endpoint disponibile" |
| 12150 | return out |
| 12151 | |
| 12152 | ep = endpoints[0] |
| 12153 | ep_url = ep.get("ipAddress") or "" |
| 12154 | if ep_url: |
| 12155 | out["TLS Scan Endpoint"] = str(ep_url) |
| 12156 | details = ep.get("details") or {} |
| 12157 | cert = details.get("cert") or {} |
| 12158 | if cert: |
| 12159 | if cert.get("subject"): |
| 12160 | subj = ", ".join([f"{k[0]}={k[1]}" for k in cert.get("subject", [])]) if isinstance(cert.get("subject"), list) else str(cert.get("subject")) |
| 12161 | out["TLS SSL Labs Subject"] = subj |
| 12162 | if cert.get("issuer"): |
| 12163 | iss = ", ".join([f"{k[0]}={k[1]}" for k in cert.get("issuer", [])]) if isinstance(cert.get("issuer"), list) else str(cert.get("issuer")) |
| 12164 | out["TLS SSL Labs Issuer"] = iss |
| 12165 | if cert.get("notAfter"): |
| 12166 | out["TLS SSL Labs Valid To"] = str(cert.get("notAfter")) |
| 12167 | if cert.get("notBefore"): |
| 12168 | out["TLS SSL Labs Valid From"] = str(cert.get("notBefore")) |
| 12169 | if cert.get("sha1Fingerprint"): |
| 12170 | out["TLS SSL Labs SHA1"] = str(cert.get("sha1Fingerprint")) |
| 12171 | if cert.get("sha256Fingerprint"): |
| 12172 | out["TLS SSL Labs SHA256"] = str(cert.get("sha256Fingerprint")) |
| 12173 | |
| 12174 | chain = details.get("chain") or [] |
| 12175 | chain_items = [] |
| 12176 | for idx, c in enumerate(chain[:8], start=1): |
| 12177 | if not isinstance(c, dict): |
| 12178 | continue |
| 12179 | name = c.get("label") or f"Cert {idx}" |
| 12180 | issuer = c.get("issuer") or {} |
| 12181 | if isinstance(issuer, dict): |
| 12182 | issuer_name = issuer.get("O") or issuer.get("CN") or "" |
| 12183 | else: |
| 12184 | issuer_name = str(issuer) |
no test coverage detected