Tag HTML <keygen>
Il tag HTML <keygen> è obsoleto e rimosso dai browser. Scopri cosa faceva, i suoi vecchi attributi e il sostituto moderno Web Crypto API.
Il tag <keygen> era un elemento HTML associato ai form, utilizzato per generare una coppia di chiavi pubblica/privata per la registrazione di certificati client. Da allora è stato deprecato e rimosso dallo standard HTML e da tutti i browser moderni, quindi non funziona più in nessun contesto. Questa pagina documenta cosa faceva e cosa usare al suo posto.
<keygen> è obsoleto. È stato rimosso dalla specifica HTML e abbandonato da tutti i principali browser (circa 2017–2020). Non fa nulla nei browser attuali e non deve essere utilizzato nelle nuove pagine. Per generare chiavi crittografiche nel browser, usa la Web Cryptography API (crypto.subtle.generateKey()) — vedi la sezione Cosa usare al suo posto qui sotto.
Cosa faceva
Quando veniva inviato un form contenente un elemento <keygen>, il browser:
- Generava una nuova coppia di chiavi pubblica/privata sul dispositivo dell'utente.
- Memorizzava la chiave privata nel keystore locale (il portachiavi del browser o del sistema operativo); non lasciava mai il dispositivo.
- Inviava la chiave pubblica al server, confezionata come stringa
SignedPublicKeyAndChallenge(SPKAC), insieme al resto dei dati del form.
Il server poteva quindi utilizzare quella chiave pubblica per emettere un certificato client, associandolo alla chiave che l'utente manteneva localmente. L'intero meccanismo esisteva per supportare la registrazione di certificati client — un modo per consentire a un sito web di fornire un certificato TLS client nel browser dell'utente.
Si trattava di fornire chiavi/certificati per l'autenticazione, non di firmare documenti.
Esempio del tag HTML <keygen> (obsoleto)
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<!-- This element no longer works in any modern browser. -->
<form action="/form/submit" method="post">
<keygen name="rsaPublicKey" keytype="rsa">
User's name:
<input type="text" name="usr_name" />
<input type="submit" />
</form>
</body>
</html>Il tag <keygen> veniva inserito all'interno di un contenitore <form> e non richiedeva un tag di chiusura.
Supporto dei browser
- Chrome, Edge, Firefox, Safari, Opera: Rimosso. Tutti i principali browser hanno abbandonato il supporto per
<keygen>; viene ignorato se appare nel markup oggi. - Browser mobili: Non supportato.
Cosa usare al suo posto
<keygen> è stato deprecato perché il suo compito è passato a JavaScript. Il sostituto tecnico diretto per la generazione di una coppia di chiavi nel browser è la Web Cryptography API, in particolare crypto.subtle.generateKey(). Offre agli script un controllo dettagliato sull'algoritmo, sugli usi della chiave e sull'estraibilità della stessa — nessuno dei quali <keygen> forniva.
// Generate an RSA key pair with the Web Crypto API.
const keyPair = await crypto.subtle.generateKey(
{
name: "RSASSA-PKCS1-v1_5",
modulusLength: 2048,
publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537
hash: "SHA-256",
},
true, // keys can be exported
["sign", "verify"] // allowed operations
);
// Export the public key to send it to the server.
const publicKey = await crypto.subtle.exportKey("spki", keyPair.publicKey);Per l'autenticazione degli utenti in senso più ampio, le applicazioni moderne utilizzano la Web Authentication API (WebAuthn) — lo standard alla base dei passkey e delle chiavi di sicurezza hardware — invece della registrazione di certificati client tramite <keygen>.
Nota: protocolli come OAuth e OpenID Connect risolvono un problema diverso (autorizzazione delegata e accesso). Non sono un sostituto per la generazione di chiavi crittografiche che
<keygen>eseguiva.
Attributi (obsoleti)
Questi attributi erano definiti per <keygen> mentre faceva parte della specifica. Sono elencati solo a scopo di riferimento — l'elemento e tutti i suoi attributi sono obsoleti.
| Attributo | Valore | Descrizione |
|---|---|---|
| autofocus | autofocus | Specificava che l'elemento riceveva automaticamente il focus al caricamento della pagina. |
| challenge | string | Una stringa challenge confezionata con la chiave pubblica (nell'SPKAC) quando il form veniva inviato. Impostata su una stringa vuota se omessa. |
| disabled | disabled | Disabilitava l'elemento <keygen>. |
| form | form_id | Associava l'elemento a un form specifico tramite il suo id, consentendogli di trovarsi al di fuori di quel form nel markup. |
| keytype | rsa, dsa, ec | L'algoritmo della chiave. rsa era l'unico valore supportato in modo coerente (e il predefinito); dsa e ec non sono mai stati implementati in modo affidabile. |
| name | string | Il nome inviato insieme alla chiave pubblica generata. |
Il tag <keygen> supportava anche gli Attributi globali e gli Attributi evento.
Elementi obsoleti correlati
<keygen> è uno dei vari elementi che sono stati rimossi dall'HTML. Consulta l'elenco completo dei tag HTML deprecati e l'elemento <form> con cui era progettato per funzionare.