Torna al Blog

Certificati TLS non autorizzati sui Game Server: come i log di Certificate Transparency individuano ciò che i firewall non vedono

Pubblicato il 14 agosto 2026
Certificati TLS non autorizzati sui Game Server: come i log di Certificate Transparency individuano ciò che i firewall non vedono Generata con l'aiuto dell'IA

In breve

Scopri come monitorare i log di Certificate Transparency per individuare certificati TLS non autorizzati sui game server prima che diventino violazioni.

Proprio ora esiste un registro pubblico e append-only di ogni certificato TLS emesso per ogni dominio su internet — incluso il tuo. Se domani qualcuno si presenta da una Certificate Authority e la convince a emettere un certificato TLS valido per la tua API di gioco su api.yourgame.com, quel certificato comparirà nei log di Certificate Transparency (CT) entro pochi minuti. L'unica domanda è se te ne accorgerai.

La maggior parte degli sviluppatori di giochi non se ne accorgerà. Lo scoprono quando i giocatori segnalano errori SSL, quando un penetration tester segnala il problema, o peggio — quando token di autenticazione rubati iniziano a comparire su mercati secondari perché un certificato malevolo ha abilitato un proxy man-in-the-middle tra i giocatori e l'endpoint di login.

Questo post è un runbook per monitorare i log di Certificate Transparency sui domini del tuo backend di gioco. Copre cosa sono realmente i log CT, come interrogarli programmaticamente, come filtrare il rumore dei tuoi rinnovi di routine e come costruire una pipeline di alerting che intercetti emissioni di certificati non autorizzate prima che diventino violazioni.

Cosa si rompe: emissione non autorizzata di certificati TLS sui backend di gioco

Ogni certificato TLS emesso da una Certificate Authority (CA) pubblicamente fidata deve essere registrato in almeno due log pubblici di Certificate Transparency. Questo è di fatto obbligatorio dall'aprile 2018, quando Chrome ha iniziato a richiedere l'inclusione CT per tutti i nuovi certificati. Apple Safari ha seguito con requisiti simili. Qualsiasi certificato non registrato non sarà considerato attendibile dai principali browser.

L'ecosistema CT esiste per rilevare le emissioni non autorizzate — situazioni in cui una CA emette un certificato per un dominio che il richiedente non controlla. Per i backend di gioco, il modello di minaccia è il seguente:

  • Intercettazione delle credenziali: un attaccante ottiene un certificato valido per auth.yourgame.com, configura un proxy tra i giocatori e il tuo server di autenticazione reale, e raccoglie i token di login. Per il giocatore, la connessione sembra legittima perché il browser si fida del certificato.
  • Impersonazione dell'API: un certificato per matchmaking.yourgame.com consente a un soggetto malevolo di terminare le connessioni TLS e iniettare logica di gioco falsa o reindirizzare i giocatori a un server contraffatto.
  • Attacchi di replay e downgrade: con un certificato valido in mano, un attaccante può rimuovere TLS e ritrasmettere il traffico, abilitando attacchi di session replay o downgrade del protocollo che altrimenti fallirebbero contro un endpoint cifrato configurato correttamente.

Non è teoria. Il monitoraggio CT ha individuato l'incidente MITM di CNNIC nel 2015 e molteplici emissioni non autorizzate di Symantec che hanno portato Chrome a non fidarsi di tutti i certificati Symantec. Lo stesso meccanismo che intercetta i compromessi di CA a livello statale funziona per il server API del tuo gioco indie.

Cos'è Certificate Transparency (e cosa non è)

Certificate Transparency non è uno strumento di sicurezza che installi. È un insieme di server di log pubblici, crittograficamente verificabili, che registrano ogni certificato emesso dalle CA partecipanti. Ecco cosa succede quando viene emesso un certificato:

  1. La CA genera un pre-certificato e lo invia a uno o più log CT.
  2. Ogni log restituisce un Signed Certificate Timestamp (SCT) — una promessa crittografica che il log ha registrato il certificato.
  3. La CA incorpora quegli SCT nel certificato finale e lo emette al richiedente.
  4. I browser verificano la presenza di SCT validi prima di considerare attendibile il certificato.

Ognuna di queste voci di log è pubblicamente interrogabile. Servizi come crt.sh offrono un'interfaccia di ricerca gratuita sui log. Chiunque — incluso te — può cercare tutti i certificati mai emessi per un dato dominio.

Cosa CT non fa: non previene le emissioni non autorizzate. Non revoca i certificati dannosi. Fornisce rilevamento, non prevenzione. Questo significa che qualcuno deve effettivamente monitorare i log e agire su ciò che trova. Quel qualcuno sei tu.

Come rilevarlo: interrogare i log CT programmaticamente

Il modo più accessibile per interrogare i log di Certificate Transparency è crt.sh, Certificate Search, gestito da Sectigo. Fornisce un'API JSON che non richiede autenticazione. Ecco uno script Python pronto per la produzione che interroga i log CT per il tuo dominio e segnala emissioni di certificati inattese:

import requests
import json
from datetime import datetime, timedelta

# Domains to monitor — your game's API, auth, and matchmaker endpoints
MONITORED_DOMAINS = [
    "api.yourgame.com",
    "auth.yourgame.com",
    "match.yourgame.com",
]

# Issuers you expect and trust (adjust to your CDN/infrastructure provider)
TRUSTED_ISSUERS = {
    "C=US, O=Let's Encrypt, CN=R3",
    "C=US, O=Let's Encrypt, CN=E1",
    "C=US, O=Let's Encrypt, CN=R10",
    "C=US, O=Cloudflare, Inc., CN=Cloudflare Inc ECC CA-3",
}

def query_ct_logs(domain: str, check_hours: int = 72) -> list[dict]:
    """Query crt.sh for certificates issued for a domain in the last N hours."""
    url = f"https://crt.sh/?q=%25.{domain}&output=json"
    headers = {"User-Agent": "GameBackend-CT-Monitor/1.0"}

    try:
        resp = requests.get(url, headers=headers, timeout=60)
        resp.raise_for_status()
        certificates = resp.json()
    except requests.RequestException as e:
        print(f"[ERROR] Failed to query crt.sh for {domain}: {e}")
        return []

    cutoff = datetime.utcnow() - timedelta(hours=check_hours)
    results = []
    for cert in certificates:
        # crt.sh returns not_before as "2024-01-15T09:00:00" UTC
        try:
            not_before = datetime.strptime(cert["not_before"], "%Y-%m-%dT%H:%M:%S")
        except (ValueError, KeyError):
            continue
        if not_before > cutoff:
            results.append({
                "id": cert.get("id"),
                "domain": cert.get("common_name"),
                "issuer": cert.get("issuer_name"),
                "not_before": cert.get("not_before"),
                "not_after": cert.get("not_after"),
                "serial_number": cert.get("serial_number"),
            })
    return results

def run_monitor():
    """Check all monitored domains and return unauthorized certificates."""
    all_alerts = []
    for domain in MONITORED_DOMAINS:
        recent_certs = query_ct_logs(domain, check_hours=72)
        for cert in recent_certs:
            issuer = cert["issuer"]
            # Normalize: crt.sh sometimes adds whitespace variants
            issuer_normalized = issuer.strip()
            is_trusted = any(
                trusted in issuer_normalized for trusted in TRUSTED_ISSUERS
            )
            if not is_trusted:
                all_alerts.append(cert)
                print(
                    f"⚠️  ALERT: Unexpected certificate for {cert['domain']}\n"
                    f"   Issuer:    {issuer}\n"
                    f"   Valid:     {cert['not_before']} → {cert['not_after']}\n"
                    f"   Serial:    {cert['serial_number']}\n"
                    f"   crt.sh ID: https://crt.sh/?q={cert['serial_number']}\n"
                )
    if not all_alerts:
        print("✅ No unexpected certificates found across all monitored domains.")
    return all_alerts

if __name__ == "__main__":
    run_monitor()

Esegui questo script con un cron job ogni 12 ore e avrai un sistema di monitoraggio CT rudimentale ma efficace:

0 */12 * * * /usr/bin/python3 /opt/monitor/ct_monitor.py >> /var/log/ct_monitor.log 2>&1

Cosa fa bene questo script

  • Interroga crt.sh (gratuito, senza API key, illimitato per frequenze di polling ragionevoli)
  • Filtra per data di emissione, così vedi solo i certificati delle ultime 72 ore
  • Verifica l'issuer rispetto a un allowlist di trusted, per segnalare certificati da CA inattese
  • Emette output strutturato che puoi inoltrare a Slack, Discord, PagerDuty o email

Dove questo script è carente

L'approccio basato su allowlist funziona solo se conosci in anticipo ogni issuer. Se passi da Let's Encrypt a ZeroSSL, riceverai un falso allarme. Inoltre crt.sh ha una latenza — tipicamente da 15 minuti a qualche ora tra l'emissione e la comparsa nel log, più il tempo aggiuntivo per l'indicizzazione da parte di crt.sh. L'alerting in tempo reale richiede il monitoraggio diretto dei log CT, che è sostanzialmente più complesso.

C'è anche il problema del rumore, e ha quasi distrutto l'intero modello di monitoraggio.

Il problema del rumore: l'affaticamento da alert causato dai tuoi stessi certificati

Ecco la parte che distrugge la maggior parte delle configurazioni di monitoraggio CT: il rumore generato dai tuoi stessi certificati legittimi.

I certificati TLS sono per progettazione a vita breve. Un certificato Let's Encrypt standard è valido per 90 giorni e si rinnova automaticamente intorno al giorno 60. I certificati Cloudflare Universal SSL possono rinnovarsi ogni 60 giorni — circa sei volte l'anno. Il CA/Browser Forum ha votato di ridurre la durata massima dei certificati a 47 giorni entro il 2029, il che quasi raddoppierà la cadenza di rinnovo.

Ognuno di questi rinnovi compare nei log CT. Ogni voce di log attiva il tuo script di monitoraggio. Se gestisci tre domini del backend di gioco con rinnovo automatico dei certificati, hai 18 alert all'anno per dominio provenienti dalla tua infrastruttura — ognuno appare come un certificato "nuovo" nei log.

Un cliente Cloudflare ha raccontato di aver disabilitato il monitoraggio CT su tutti i propri siti perché era stanco di "ricevere spam da un sacco di rinnovi di certificati del tutto normali", aggiungendo: "Alla fine non li leggevo nemmeno più."

Quando il segnale che ti interessa è un singolo certificato anomalo sepolto in un flusso di rinnovi automatici che dall'esterno non puoi distinguere, il sistema smette di funzionare. Ti serve un modo per identificare e sopprimere gli alert per i certificati che hai emesso tu stesso.

La soluzione: SPKI fingerprinting per separare i tuoi certificati da quelli sconosciuti

Cloudflare ha recentemente risolto il problema su larga scala usando gli hash SubjectPublicKeyInfo (SPKI) come identificatore coerente tra i propri sistemi di emissione certificati e di alerting CT. L'approccio si generalizza a qualsiasi infrastruttura, e gli sviluppatori di giochi che gestiscono i propri certificati possono adottare la stessa tecnica.

Perché una semplice lookup non funziona

L'istinto iniziale è tenere traccia dei certificati emessi in un database e incrociare i loro numeri di serie o impronte con le voci dei log CT. Il problema è il timing:

  1. Una CA genera un pre-certificato e lo invia ai log CT.
  2. Il log CT registra il pre-certificato.
  3. La CA incorpora i Signed Certificate Timestamps (SCT) nel certificato finale.
  4. La CA registra il certificato finale.
  5. La CA consegna il certificato finale a te.

L'impronta hash del pre-certificato e quella del certificato finale differiscono leggermente, perché il certificato finale contiene gli SCT incorporati che il pre-certificato non aveva. Se il tuo sistema di monitoraggio vede la voce del pre-certificato nel log CT prima che la CA consegni il certificato finale al tuo sistema di richiesta, non c'è alcun record con cui confrontarlo. Ottieni un falso allarme.

L'hash SPKI: un identificatore che compare in ogni fase

L'hash SPKI risolve il problema del timing perché la chiave pubblica è identica nel pre-certificato e nel certificato finale. Viene generato al momento della creazione della chiave — prima che qualsiasi certificato venga emesso — e non cambia.

L'identificatore è: spki_sha256 = SHA-256(DER-encoded SubjectPublicKeyInfo)

Ecco come calcolarlo:

from cryptography import x509
from cryptography.hazmat.primitives import hashes, serialization
import hashlib

def compute_spki_sha256_from_pem(pem_data: str) -> str:
    """Compute spki_sha256 from any PEM-encoded certificate (pre-cert or final)."""
    cert = x509.load_pem_x509_certificate(pem_data.encode("utf-8"))
    spki_der = cert.public_key().public_bytes(
        encoding=serialization.Encoding.DER,
        format=serialization.PublicFormat.SubjectPublicKeyInfo,
    )
    return hashlib.sha256(spki_der).hexdigest()

def compute_spki_sha256_from_csr(csr_pem: str) -> str:
    """Compute spki_sha256 from a Certificate Signing Request (earliest possible point)."""
    csr = x509.load_pem_x509_csr(csr_pem.encode("utf-8"))
    spki_der = csr.public_key().public_bytes(
        encoding=serialization.Encoding.DER,
        format=serialization.PublicFormat.SubjectPublicKeyInfo,
    )
    return hashlib.sha256(spki_der).hexdigest()

Il flusso di monitoraggio con filtro SPKI

L'architettura di monitoraggio aggiornata funziona così:

Dal tuo lato (emissione dei certificati):

  1. Genera una nuova coppia di chiavi per ogni ordine di certificato.
  2. Calcola spki_sha256 dalla CSR o dalla chiave pubblica.
  3. Memorizza l'hash nel tuo database di tracciamento immediatamente — prima ancora che la CA inizi l'emissione.
  4. Conserva gli hash per l'intera durata del certificato più un margine di sicurezza (es. 30 giorni dopo la scadenza).

Dal lato monitoraggio (scansione dei log CT):

  1. Analizza le nuove voci dei log CT per i tuoi domini.
  2. Estrai la chiave pubblica da ogni voce di log e calcola spki_sha256.
  3. Cerca l'hash nel tuo database di tracciamento.
  4. Trovata corrispondenza → questo certificato proviene dalla tua infrastruttura. Sopprimi l'alert.
  5. Nessuna corrispondenza → questo certificato non è stato emesso dal tuo sistema. Attiva un alert.

Questo elimina i falsi positivi dai tuoi rinnovi senza perdere certificati realmente sospetti provenienti da CA esterne.

Runbook completo: configurare il monitoraggio di Certificate Transparency per i game server

Prerequisiti

  • Un elenco di tutti i domini e sottodomini usati dal tuo backend di gioco (inclusi CDN, auth, matchmaking, telemetria, distribuzione asset)
  • Python 3.9+ con le librerie requests e cryptography
  • Un endpoint di alerting (Slack webhook, Discord webhook, email SMTP o PagerDuty)
  • Accesso al tuo sistema di gestione certificati per registrare gli hash SPKI al momento dell'emissione

Step 1: Mappa la tua superficie d'attacco

Prima di monitorare, ti serve un inventario completo dei domini. Se ne salti uno, resta senza monitoraggio. I domini comuni per un backend di gioco includono:

  • api.yourgame.com — API principale del gioco
  • auth.yourgame.com / login.yourgame.com — endpoint di autenticazione
  • match.yourgame.com / lobby.yourgame.com — server di matchmaking e lobby
  • cdn.yourgame.com / assets.yourgame.com — distribuzione asset statici
  • telemetry.yourgame.com — analytics e crash reporting
  • status.yourgame.com — pagina di stato (spesso un servizio separato)

I domini wildcard (es. *.yourgame.com) espandono ulteriormente la superficie. Ogni certificato wildcard che copre il tuo dominio è un vettore d'attacco se emesso in modo improprio.

Step 2: Configura il tracciamento degli hash SPKI

Integra la registrazione degli hash nella tua pipeline di deploy dei certificati. Ogni volta che un certificato viene richiesto o generato, calcola e memorizza l'hash SPKI. Un approccio semplice è un database SQLite locale o una chiave Redis condivisa:

import sqlite3
from datetime import datetime, timezone

DB_PATH = "/opt/monitor/spki_hashes.db"

def init_db():
    conn = sqlite3.connect(DB_PATH)
    conn.execute("""
        CREATE TABLE IF NOT EXISTS known_hashes (
            spki_hash TEXT PRIMARY KEY,
            domain TEXT NOT NULL,
            recorded_at TEXT NOT NULL,
            expires_at TEXT
        )
    """)
    conn.commit()
    conn.close()

def register_certificate(spki_hash: str, domain: str, expires_at: str):
    conn = sqlite3.connect(DB_PATH)
    conn.execute(
        "INSERT OR REPLACE INTO known_hashes (spki_hash, domain, recorded_at, expires_at) VALUES (?, ?, ?, ?)",
        (spki_hash, domain, datetime.now(timezone.utc).isoformat(), expires_at),
    )
    conn.commit()
    conn.close()

def is_known_certificate(spki_hash: str) -> bool:
    conn = sqlite3.connect(DB_PATH)
    row = conn.execute(
        "SELECT 1 FROM known_hashes WHERE spki_hash = ?", (spki_hash,)
    ).fetchone()
    conn.close()
    return row is not None

Step 3: Costruisci la pipeline di alerting

Combina lo script di interrogazione CT con il controllo nel database SPKI. Quando un nuovo certificato compare nei log CT:

  1. Calcola il suo hash SPKI.
  2. Controlla il database degli hash noti.
  3. Se sconosciuto, invia immediatamente un alert.
  4. Includi il link crt.sh, l'issuer, il periodo di validità e l'hostname nel payload dell'alert.

Instradare gli alert a un webhook Slack o Discord è rapido da configurare e offre al tuo team visibilità immediata:

import os
import requests

SLACK_WEBHOOK_URL = os.environ.get("SLACK_CT_WEBHOOK_URL")

def send_slack_alert(cert: dict):
    if not SLACK_WEBHOOK_URL:
        print("[WARN] No Slack webhook configured; alert not sent.")
        return
    payload = {
        "text": (
            f"🚨 *Unauthorized TLS Certificate Detected*\n"
            f"*Domain:* {cert['domain']}\n"
            f"*Issuer:* {cert['issuer']}\n"
            f"*Valid:* {cert['not_before']} → {cert['not_after']}\n"
            f"*CT Log Entry:* https://crt.sh/?q={cert['serial_number']}\n"
            f"_Investigate immediately._"
        )
    }
    requests.post(SLACK_WEBHOOK_URL, json=payload, timeout=10)

Step 4: Definisci il tuo playbook di incident response

Quando un alert scatta, ti serve una sequenza di risposta documentata. Un falso allarme costa 5 minuti di indagine. Un'emissione non autorizzata reale ignorata costa le credenziali dei tuoi giocatori.

Azioni immediate (entro 1 ora dall'alert):

  1. Apri il link crt.sh e verifica i dettagli del certificato (dominio, issuer, tipo di chiave, date di validità).
  2. Controlla se l'issuer è uno che riconosci. CA sconosciute, come un'oscura autorità regionale che emette certificati per il tuo dominio .com, sono un campanello d'allarme.
  3. Verifica se il certificato è ancora valido e raggiungibile sulla porta 443 rispetto ai record DNS del tuo dominio (openssl s_client -connect yourgame.com:443 -servername yourgame.com).
  4. Confronta l'impronta della chiave pubblica del certificato con le tue chiavi note.

Se il certificato non è autorizzato:

  1. Invia un Certificate Problem Report alla CA che lo ha emesso (la maggior parte delle CA ha un contatto abuse@ o security@).
  2. Contatta contemporaneamente la CA tramite la sua interfaccia web o un canale di escalation diretto.
  3. Se la CA non risponde entro 24 ore, scala al CA/Browser Forum o ai programmi root dei browser (contatto Chromium Security di Chrome, CA Complaints di Mozilla).
  4. Se l'emissione non autorizzata è stata causata da un errore di domain validation (qualcuno ha dimostrato un controllo che non aveva), controlla tutti i tuoi record DNS e WHOIS per segni di compromissione.
  5. Valuta di implementare record DNS CAA (Certificate Authority Authorization) per limitare quali CA possono emettere certificati per il tuo dominio:
yourgame.com.  IN  CAA  0 issue "letsencrypt.org"
yourgame.com.  IN  CAA  0 issuewild "letsencrypt.org"
yourgame.com.  IN  CAA  0 iodef "security@yourgame.com"

I record CAA vengono verificati dalle CA conformi prima dell'emissione. Non fermeranno una CA non conforme, ma riducono significativamente la superficie d'attacco e rendono impossibile l'emissione non autorizzata da parte delle CA che rispettano i record CAA.

Step 5: Automatizza la prevenzione delle recidive

Dopo aver gestito un incidente, rafforza la tua posizione:

  • Implementa record CAA per tutti i domini del backend di gioco (se non già presenti).
  • Abilita DNS-based Authentication of Named Entities (DANE) con record TLSA dove il tuo provider DNS lo supporta — questo vincola chiavi di certificato specifiche al tuo dominio a livello DNS.
  • Riduci la finestra di rinnovo dei tuoi certificati. Certificati con vita più breve riducono il raggio d'esplosione di una chiave privata compromessa.
  • Registra tutti gli eventi di emissione certificati della tua infrastruttura come voci di audit trail con timestamp e hash SPKI.

Best practice: rafforzare la gestione dei certificati TLS per i game server

  1. Monitora ogni dominio usato dal tuo gioco, non solo l'API principale. Endpoint di telemetria, origini CDN, beacon analytics e server di staging rappresentano tutti superficie d'attacco. Un certificato emesso per un sottodominio dimenticato come old-matchmaking.yourgame.com può essere ancora usato per l'intercettazione se quel dominio risolve a qualcosa di raggiungibile.

  2. Implementa record DNS CAA per ogni dominio che controlli. Un singolo record CAA 0 issue "letsencrypt.org" dice alle CA conformi di rifiutare richieste di emissione da qualsiasi altra autorità. È una modifica DNS di cinque minuti che blocca un'intera classe di emissioni non autorizzate. Aggiungi iodef per ricevere notifiche email quando una CA rifiuta una richiesta di emissione a causa della tua policy CAA.

  3. Memorizza gli hash SPKI dei tuoi certificati al momento dell'emissione, non dopo il deploy. La finestra tra la registrazione del pre-certificato nella CA e la ricezione del certificato finale da parte del tuo sistema è dove vivono i falsi allarmi. Registrare l'hash SPKI al momento della generazione della chiave — prima ancora che la CSR venga inviata — elimina completamente questa lacuna.

  4. Imposta una cadenza di monitoraggio più rapida del ciclo di rinnovo dei certificati. Se i tuoi certificati si rinnovano ogni 60 giorni, controllare i log CT una volta al giorno ti dà una latenza massima di rilevamento di 24 ore. Per backend di gioco in produzione dove i token di autenticazione sono il bersaglio di maggiore valore, questo è accettabile ma non ideale. Ogni 6-12 ore è un buon compromesso pratico data la latenza di indicizzazione di crt.sh.

  5. Integra gli alert CT nel tuo canale di incident response esistente. Un monitoraggio CT che invia email a una casella condivisa che nessuno controlla è peggio che inutile — crea falsa fiducia. Instrada gli alert nello stesso canale Slack o Discord che il tuo team on-call già monitora per gli alert di salute dei server. (È distinto dai protocolli di crash dei server generali, ma la cadenza di risposta dovrebbe essere simile — sensibile al tempo, documentata, con un responsabile.)

Come horizOn gestisce i certificati

Tracciare manualmente gli hash SPKI, interrogare i log CT, implementare record CAA e mantenere un playbook di incident response è lavoro vero — tipicamente 2-3 settimane di ingegneria dell'infrastruttura per un piccolo team. horizOn gestisce provisioning e rinnovo dei certificati TLS come parte della sua piattaforma backend per sviluppatori di giochi, il che significa che i certificati emessi attraverso la piattaforma sono già tracciati internamente. Il lato monitoraggio (leggere i log CT per trovare issuer inattesi) richiede ancora strumenti esterni, ma metà del problema — sapere quali certificati sono tuoi — è risolta automaticamente.

Se stai costruendo un backend di gioco e vuoi evitare di configurare da solo gestione certificati, automazione dei rinnovi e tracciamento SPKI, horizOn ti offre una base pre-costruita così puoi concentrarti sulla logica di gioco invece che sulla gestione della PKI.

Prossimi passi

Inizia con lo script di questo post. Puntalo oggi sui domini del tuo gioco ed eseguilo manualmente per vedere cosa c'è già nei log CT per la tua infrastruttura. Potresti essere sorpreso dal volume di certificati storici — e almeno saprai com'è la tua baseline prima di iniziare ad automatizzare gli alert. Poi aggiungi il tracciamento degli hash SPKI per filtrare i tuoi rinnovi, e avrai un sistema di monitoraggio che fa emergere davvero ciò che conta: certificati che non ti aspettavi, emessi da CA che non hai scelto.


Fonte: Il monitoraggio di Certificate Transparency è ora generalmente disponibile