Dove vivono n, e, d, p e q di RSA in un file di chiave VPN
n, e, d, p e q stanno dentro un’unica struttura, non nei nomi dei file. Leggi una chiave RSA VPN con OpenSSL e abbinala al suo certificato senza stampare segreti.
Le lettere di una spiegazione RSA nominano campi dentro un oggetto, non file che uno strumento PKI distribuisce. Un file di chiave privata contiene una struttura i cui primi campi sono pubblici e i cui campi successivi non devono mai lasciare la macchina che termina il tunnel. Tra questi due fatti stanno la maggior parte delle domande pratiche su quale file risponda a quale domanda. Questo manuale legge prima la struttura, poi i comandi che la ispezionano senza versarla.
Conferma che la chiave è RSA prima di cercare numeri primi
Un certificato dimostra che una chiave esiste ed è stata firmata; non dimostra che la chiave sia RSA. I sistemi possono basarsi su curve ellittiche o Ed25519, e la stessa disposizione di directory serve a tutti. Controlla l’algoritmo prima di iniziare a cercare fattori primi che non sono mai stati lì.
Questi tre comandi di sola lettura rispondono alla domanda e registrano la versione dello strumento.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
La versione conta perché i nomi delle opzioni si sono spostati tra versioni principali. Nell’output del certificato, trova la riga dell’algoritmo di chiave pubblica e la dimensione della chiave; nell’output della chiave, una chiave RSA stampa un modulo e un esponente pubblico. Una chiave su curva ellittica stampa invece una curva con nome, e nessuna ricerca produrrà n o q da essa.
Leggi la struttura invece del base64
PEM è base64 avvolto in righe di intestazione, e decodificarlo produce DER, cioè una struttura serializzata e non un unico intero enorme. Le chiavi private RSA viaggiano in due contenitori comuni, PKCS#1 e PKCS#8, ed entrambi si risolvono allo stesso insieme di numeri.
Nel caso di due primi, la struttura privata porta nove campi: una versione, il modulo n, l’esponente pubblico e, l’esponente privato d, i primi p e q, due esponenti CRT e un coefficiente CRT. RFC 8017 sezione A.1 definisce questi componenti e la disposizione ASN.1, e consente anche più di due primi, per questo un analizzatore generico può stampare voci di primi aggiuntive. Nota l’ordine, perché spiega un errore frequente: la metà pubblica è memorizzata dentro il file privato, quindi la presenza di un campo pubblico non rende quel file sicuro da condividere. Tutto ciò che segue è il materiale che deve restare sull’host.
La codifica aggiunge uno strato facile da confondere con il contenuto. openssl asn1parse disegna la struttura come un albero così che l’ordine dei campi diventi visibile, e non decifra nulla né dice se la chiave è utilizzabile.
Abbina un certificato a una chiave senza stampare la chiave
La domanda che segue è di solito se un certificato e una chiave stiano insieme. Confrontare i moduli lo risponde, ma copia anche materiale vicino al privato in una trascrizione di terminale che può finire in un ticket. Confrontare le metà pubbliche risponde alla stessa domanda senza nulla di sensibile sullo schermo.
openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH
File identici significano che il certificato porta la metà pubblica di quella chiave, e una differenza significa che stai tenendo la coppia sbagliata. Quella discrepanza è la causa più comune di un tunnel che negozia allegramente e poi rifiuta l’autenticazione. Poi rimuovi i due file temporanei; non contengono nulla di segreto, ma una directory di lavoro pulita è più facile da ragionare a metà di un incidente.
Sapere cosa non sono i file vicini
Un certificato non è una chiave pubblica cifrata che il pari sblocca con il certificato della CA; è un legame firmato tra una chiave pubblica e dati di identità. La chiave di firma privata della CA resta separata dal suo certificato e da ogni chiave client. Anche una richiesta non è un certificato: porta le informazioni richieste e la chiave pubblica con una firma sulla richiesta, il che la rende input di registrazione e non prova di diritto.
| File | Answers | Does not prove |
|---|---|---|
| vpn-client.key | Possession of the private key | That the identity is enrolled |
| vpn-client.crt | A signed binding of public key to identity | That the client holds the matching key |
| vpn-client.csr | The requested binding and public key | That access was granted |
| dh2048.pem | Group parameters for key exchange | Any RSA component |
| crl.pem | Revocation status for certificates | Anything about a private key |
Due di queste voci si confondono con i parametri RSA abbastanza spesso da doverle nominare due volte. Un file di parametri Diffie-Hellman contiene parametri di gruppo per lo stabilimento della chiave e nessun primo RSA, anche se viene stampato anch’esso come un primo grande. Una lista di revoca pubblica lo stato dei certificati e non è un luogo dove un esponente privato potrebbe nascondersi.
Ogni riga di inventario dovrebbe quindi registrare quattro cose: tipo di oggetto, proprietario, scopo e se è incluso materiale privato. L’ultima colonna decide dove il file può essere copiato, ed è quella che le persone saltano.
Registra l’abbinamento, poi verifica l’handshake
Prima di cambiare qualcosa, salva l’output della verifica con la data e la versione di OpenSSL. Una rotazione successiva potrà così essere confrontata con prove invece che con la memoria.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
Dopo il confronto della chiave pubblica, percorri il cammino che consuma la coppia: alza il tunnel, conferma che il certificato venga presentato e accettato, e controlla quale identità ha registrato il gateway. Se chiave e certificato corrispondono e l’autenticazione fallisce ancora, il difetto è nella fiducia, nella mappatura delle identità o nella politica di accesso, non nella coppia.
Per il rollback, conserva la chiave e il certificato precedenti in una directory datata e ripristina entrambi insieme, mai uno dei due. Una chiave senza il suo certificato e un certificato senza la sua chiave falliscono allo stesso modo dall’esterno, il che rende le coppie ripristinate a metà costose da districare alle due di notte.