Utilizzo dei certificati X509 in fibjs
Introduzione di fondo
Cos'è un certificato x509
Il certificato x509 è il formato di certificato digitale più comunemente utilizzato nel sistema PKI (servizio di autenticazione a chiave pubblica) basato su standard internazionali. Può essere utilizzato per l'autenticazione e la crittografia ed è ampiamente utilizzato nei protocolli SSL/TLS e in altri tipi di applicazioni di rete su Internet. Il certificato x509 utilizza un meccanismo di autenticazione a chiave pubblica/chiave privata e può garantire la riservatezza, l'integrità e l'autenticità della trasmissione dei dati.
In quali scenari viene utilizzato il certificato x509?
Su Internet, lo scenario più comunemente utilizzato per i certificati x509 è l'autenticazione del certificato nel protocollo TLS/SSL per garantire che i dati trasmessi tra il client e il server siano crittografati utilizzando un canale sicuro e verificati. I certificati x509 possono essere utilizzati anche per l'autenticazione dell'identità nei protocolli applicativi basati sulla crittografia a chiave pubblica e privata come VPN/SSH.
fibjs supporta l'elaborazione dei certificati x509
fibjs supporta l'elaborazione di certificati x509 e fornisce classi come X509Cert e X509Req nel modulo crittografico per eseguire operazioni come lettura, creazione e firma di certificati. È possibile utilizzare queste classi per ottenere il periodo di validità del certificato, la chiave pubblica, l'emittente, il nome del soggetto e altre informazioni, nonché eseguire operazioni come la firma e la verifica del certificato. Allo stesso tempo, fibjs fornisce anche la classe HttpsServer per supportare l'autenticazione del certificato HTTPS e le connessioni crittografate, semplificando l'utilizzo dei certificati x509 in fibjs.
Introduzione al modulo X509
Cos'è il modulo X509?
Nel modulo crittografico di fibjs vengono fornite classi come X509Cert e X509Req per eseguire operazioni come la lettura, la creazione e la firma di certificati x509. Il modulo X509 è un modulo per l'elaborazione dei certificati x509, che fornisce operazioni come l'analisi, la creazione e la verifica dei certificati.
La funzione del modulo X509
La funzione del modulo X509 è quella di gestire il certificato x509.È possibile utilizzare questo modulo per leggere il certificato x509 esistente e ottenere il periodo di validità, la chiave pubblica, l'emittente, il nome del soggetto e altre informazioni del certificato. Allo stesso tempo, il modulo X509 può anche creare richieste di certificati x509 e certificati di firma, ad esempio per l'autenticazione dei certificati nei protocolli TLS/SSL.
API del modulo X509
Di seguito è riportato un elenco delle API più importanti nel modulo X509:
- X509Cert: Classe per la lettura e la manipolazione dei certificati x509.
- X509Req: classe utilizzata per creare richieste di certificato x509.
- verify: verifica il certificato x509 tramite la coppia di certificati CA.
- SslServer: una classe che fornisce servizi di autenticazione basati su certificati x509.
- SslSocket: una classe che fornisce operazioni di invio e ricezione di dati tramite socket per servizi di autenticazione basati su certificati x509.
Codice d'esempio
Di seguito è riportato un codice di esempio per leggere un certificato x509 e creare una richiesta di certificato x509:
1
2
3
4
5
6
7
8
9
10
11
12const crypto = require('crypto');
// load the cert
const cert = crypto.loadCert('server.crt');
console.log(cert.subject);
// create x509 certificate request
let pky = crypto.PKey.from(private_pem);
let req = new crypto.X509Req("CN=localhost,O=fibjs", pky);
let derReq = req.der();
let pemReq = req.pem();
console.log(pemReq);
Il codice di esempio precedente legge un certificato x509 esistente tramite la classe X509Cert e restituisce il nome del soggetto del certificato. Allo stesso tempo, il codice di esempio dimostra anche come creare una richiesta di certificato x509 tramite X509Req e restituisce le informazioni sulla richiesta in formato PEM.
Utilizzo del modulo X509
Genera certificato autofirmato
Il processo di generazione di un certificato autofirmato è relativamente semplice e in genere è necessario completare i seguenti passaggi:
- Genera PKey (chiave privata)
- Genera X509Req (richiesta certificato)
- Utilizza X509Req per generare X509Cert (certificato formale)
- salva certificato
Utilizzando questi passaggi è possibile generare il proprio certificato x509 da utilizzare in ambienti di test e sviluppo. Quella che segue è l'implementazione specifica:
Utilizzare il codice seguente per creare un oggetto PKey. Tra questi, il metodo from() può creare un oggetto PKey tramite una stringa di formato PEM o un Buffer.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Utilizzare il codice seguente per creare un oggetto X509Req. Tra questi, il primo parametro di X509Req è il nome distinto del soggetto (nome oggetto) e il formato della stringa è key1=value1,key2=value2. Il secondo parametro è l'oggetto PKey creato in precedenza, utilizzato per la firma del certificato. Per esempio:
1let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);
Utilizzare il codice seguente per creare un X509Cert (certificato ufficiale). L'operazione specifica consiste nel chiamare il metodo sign() di X509Req, che accetta tre parametri: il nome dell'autorità di certificazione, l'oggetto PKey utilizzato per la firma e altre informazioni correlate. Nell'esempio seguente, ad esempio, l'oggetto X509Req è firmato con un certificato autofirmato, l'autorità di firma è la stessa e il certificato è valido per 10 anni:
1
2
3
4
5const opt = {
notBefore: new Date(),
notAfter: new Date(new Date().getTime() + 10 * 365 * 24 * 60 * 60 * 1000)
};
const cert = xrq.sign("CN=localhost,O=fibjs", pky, opt);
Utilizzare il codice seguente per salvare PKey e X509Cert in un file locale. Poiché il certificato viene salvato in formato PEM, puoi utilizzare il metodo pem() per convertire l'oggetto del certificato in una stringa e quindi salvarlo direttamente nel file:
1
2
3
4
5const fs = require('fs');
const ks = pky.pem(); // export pem format data of the private key
const cs = cert.pem(); // export pem format data of the cert
fs.writeFile('mycert.key', ks); // save the key
fs.writeFile('mycert.pem', cs); // save the cert
Il codice sopra completa l'intero processo dalla generazione di una chiave privata alla memorizzazione di un certificato autofirmato. Le applicazioni relative alla sicurezza possono essere testate e sviluppate con questo certificato.
Carica certificato
Il caricamento del certificato è un'operazione importante quando si utilizzano certificati x509. Di seguito viene descritto come caricare il file del certificato e caricare le chiavi pubblica e privata.
Per utilizzare un certificato x509, il file del certificato deve prima essere letto in memoria e convertito in un oggetto certificato x509. Ecco i passaggi su come caricare il file del certificato:
Nel programma JavaScript fibjs è possibile utilizzare la relativa API del modulo fs per leggere i file. Ad esempio, utilizza il codice seguente per leggere un file di certificato in formato PEM:
1
2const fs = require('fs');
const certData = fs.readFile('server.crt');
Dopo aver letto il file, il contenuto del file di certificato deve essere convertito in un certificato x509 utilizzando l'oggetto X509Cert:
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
Dopo i passaggi precedenti, è possibile caricare il file del certificato x509 locale. Puoi anche utilizzare crypto.loadCert per leggere direttamente il certificato:
1
2const crypto = require('crypto');
const cert = crypto.loadCert('server.crt');
Il certificato x509 memorizza la chiave pubblica e le informazioni sulla firma crittografata, pertanto, quando si utilizza il certificato, è necessario analizzare la chiave pubblica nel certificato per facilitare la crittografia e la decrittografia dei dati. La classe PKey può convertire stringhe di chiave pubblica/privata in formato PEM in oggetti chiave pubblica/privata. Puoi utilizzare il codice seguente per leggere la stringa della chiave pubblica/privata in formato PEM e creare un oggetto PKey:
1
2const privateKey = fs.readFile('private.pem'); // load the data from file
const pKey = crypto.PKey.from(privateKey); // load from pem format data
Oppure usa crypto.loadPKey per leggere direttamente:
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
Dopo i passaggi precedenti, il file della chiave pubblica/privata può essere convertito in un oggetto PKey.
Certificato di analisi
I certificati sono una componente importante delle interazioni SSL/TLS, utilizzati per l'autenticazione e la crittografia della trasmissione dei dati. Ora impariamo come analizzare un certificato in fibjs.
Possiamo utilizzare la classe X509Cert del modulo crittografico per costruire un oggetto certificato leggendo un file di certificato in formato DER/PEM e quindi ottenere alcune informazioni di base sul certificato, come ottenere il nome del soggetto del certificato, il nome dell'emittente, il periodo di validità, eccetera. .
Il codice di esempio è il seguente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14const crypto = require('crypto');
const cert = crypto.loadCert('path/to/cert.pem');
const subjectName = cert.subject;
const issuerName = cert.issuer;
const validFromDate = cert.notBefore;
const expirationDate = cert.notAfter;
const serialNumber = cert.serial;
console.log(`证书主题名称: ${subjectName}`);
console.log(`证书颁发者名称: ${issuerName}`);
console.log(`证书有效期: ${validFromDate.toLocaleString()} ~ ${expirationDate.toLocaleString()}`);
console.log(`证书序列号: ${serialNumber}`);
Quando dobbiamo utilizzare un certificato, dobbiamo verificarne la legittimità, la chiave è assicurarci che sia emesso da un'organizzazione fidata. È possibile utilizzare il metodo di verifica in X509Cert per verificare la validità del certificato. Un metodo di verifica comune consiste nel verificare la catena di certificati per garantire che il certificato sia emesso da una CA attendibile.
Il codice di esempio è il seguente:
1
2
3
4
5
6
7
8
9const caCert = crypto.loadCert('path/to/ca.crt');
const verifyResult = cert.verify(caCert);
if (verifyResult !== 0) {
console.error('证书验证失败', verifyResult);
} else {
console.log('证书验证通过');
}
In questo codice di esempio, leggiamo prima il certificato CA specificato, generiamo un oggetto X509Cert, quindi utilizziamo il metodo di verifica sull'oggetto certificato per verificare il certificato che deve essere verificato e ottenere il risultato della verifica. Puoi determinare se il certificato è legittimo confrontando se il risultato della verifica è uguale a 0. Se il risultato della verifica non è 0, significa che la verifica non è riuscita e il certificato deve essere interrotto.
Utilizza il certificato
Quando si utilizza un server https, è necessario assicurarsi che il certificato utilizzato sia stato aggiunto al server. Ecco un semplice esempio di caricamento dei file del certificato e della chiave privata tramite il modulo crittografico:
1
2
3
4
5
6
7
8
9
10const http = require("http");
const crypto = require("crypto");
const cert = crypto.loadCert("server.crt");
const key = crypto.loadPKey("server.key");
const server = new http.HttpsServer(cert, key, 8443, function(req) {
req.response.write(`Hello, fibjs!`);
});
server.start();
Nell'esempio precedente, abbiamo caricato i file server.crt e server.key tramite le funzioni loadCert e loadPKey, quindi abbiamo creato un servizio utilizzando l'oggetto HttpsServer e avviato il servizio con il certificato e i file di chiave caricati.
Note sul modulo X509
Sicurezza del certificato
Il modulo X509 offre funzioni come la creazione e l'elaborazione del certificato. La sicurezza del certificato deve essere garantita. Ciò richiede particolare attenzione ai seguenti punti:
- Sicurezza delle chiavi private. La chiave privata è una parte importante del certificato e deve essere rigorosamente protetta. Durante l'utilizzo dei certificati, la chiave privata dovrebbe essere conservata il più possibile in un luogo sicuro e le autorizzazioni di accesso dovrebbero essere impostate in modo appropriato.
- La trasmissione dei certificati è sicura. Durante lo scambio e l'utilizzo dei certificati devono essere utilizzate modalità di trasmissione sicure per evitare che i certificati vengano rubati o manomessi.
- La verifica del certificato è sicura. La verifica del certificato è un passo importante per garantire la validità e la sicurezza del certificato. La verifica deve essere effettuata in stretta conformità con le regole di verifica del certificato per evitare che certificati contraffatti ingannino gli utenti.
Periodo di validità del certificato
Il periodo di validità di un certificato si riferisce al periodo compreso tra la data di emissione del certificato e la data di scadenza del certificato. Il periodo di validità del certificato limita il tempo di utilizzo del certificato. Prima della scadenza del certificato, il titolare del certificato può utilizzare il certificato, ma dopo la scadenza del certificato, il certificato perderà la sua validità.
Pertanto, prima di utilizzare un certificato, è necessario verificare il periodo di validità del certificato per evitare di utilizzare un certificato scaduto. Allo stesso tempo, il certificato dovrebbe essere aggiornato il prima possibile prima della scadenza per garantirne la disponibilità.
Meccanismo di attendibilità del certificato
Il meccanismo di attendibilità del certificato è un fattore chiave per determinare se il certificato può essere considerato attendibile dal client o dal server. In genere, il client o il server considerano attendibili solo i certificati firmati e riconosciuti da un'autorità attendibile (CA).
Prima di utilizzare un certificato, è necessario determinare i problemi di attendibilità del certificato. È possibile determinare se un certificato è affidabile controllando l'autorità emittente del certificato, il nome distinto del soggetto del certificato, ecc.
Meccanismo di rinnovo del certificato
Il meccanismo di rinnovo del certificato è una parte importante per garantire che il certificato rimanga valido e sicuro. Normalmente il rinnovo del certificato comprende principalmente due aspetti:
- Rinnovo dopo la scadenza del certificato. Dopo la scadenza del certificato, è necessario richiedere nuovamente il certificato, firmarlo e verificarlo secondo le regole corrispondenti per garantire la validità del certificato.
- Estensioni e rinnovi di certificati. Durante l'utilizzo del certificato, se è necessario estendere o aggiornare le informazioni del certificato, è possibile farlo richiedendo nuovamente il certificato e firmandolo e verificandolo.
In sintesi, il modulo X509 fornisce la creazione, l'elaborazione e altre funzioni di certificati ed è un collegamento importante per garantire la sicurezza, l'affidabilità e la validità dei certificati. Nel processo di utilizzo e gestione dei certificati, è necessario seguire le regole e i requisiti corrispondenti per garantire la validità e la sicurezza del certificato.