8 Manuale - Certificati

8.1 Il comando ca

Nome

ca – semplice applicazione minimale CA

Sintassi

Openssl ca [-verbose][-config filename][-name section][-gencr][-revoke file][-subj arg][-crldays days][-crlhours hours][-crlext section][-startdate date][-enddate date][-days arg][-md arg][-policy arg][-keyfile arg][-passin arg][-cert file][-in file][-out file][-notext][-outdir dir][-spack file][-ss_cert file][-preserveDN][-batch][-msie_hack][-extensions section][-extfile section]

Descrizione

Il comando ca è un’applicazione minimale CA. Esso può essere usato per firmare richieste di certificati in una varietà di formati e generare CRLs; esso mantiene anche un database dei certificati pubblicati e il loro stato.
Le opzioni descritte saranno divise in base al loro scopo.

Opzioni CA

  • -config filename: specifica il file di configurazione da usare.
  • -in filename: un filename di input contenente una singola richiesta di certificato da far firmare al CA.
  • -ss_cert filename: un singolo certificato firmato da se stesso che deve essere firmato dal CA.
  • -spkac filename: un file contenente una singola chiave publica firmata da Netscape insieme con una challenge e valori di campi addizionali che deve essere firmato dal CA. Vedere la sezione Note per avere informazioni sul formato richiesto.
  • -infiles: se è presente questa dovrebbe essere l’ultima opzione, tutti gli argomenti successivi sono assunti essere i nomi dei files contenenti richieste di certificati.
  • -out filename: il file di output in cui mandare i certificati. Il default è lo standard output. Il certificato dettagliato sarà stampato anche fuori da questo file.
  • -outdir directory: la directory in cui produrre i certificati. Il certificato sarà scritto in un file il cui nome è un numero seriale in esadecimale con l’aggiunta di ‘.pem’
  • -cert: Il file del certificato CA
  • -keyfile filename: la chiave privata per firmare le richieste
  • -key password: la password usata per cifrare la chiave privata. Poiché su molti sistemi gli argomenti sulla linea di comando sono visibili (per esempio: Unix con l’utility ‘ps’), quest’opzione dovrebbe essere usata con cautela.
  • -passing arg: il sorgente della password key. Per informazioni maggiori circa il formato di arg vedere la sezione Argomenti di PASS PHRASE nell’openssl(1).
  • -verbose: quest’opzione stampa dettagli extra circa le operazioni che sono eseguite
  • -notext: non produce il formato del testo di un certificato come file di output
  • -startdate date: quest’opzione consente di settare esplicitamente la data di inizio. Il formato del dato è YYMMDDHHMMSSZ (lo stesso nella struttura ASN.1 UTCTime).

  • -enddate date: quest’opzione consente di settare esplicitamente la data di scadenza. Il formato del dato è YYMMDDHHMMSSZ (lo stesso nella struttura ASN.1 UTCTime).
  • -days arg: il numero di giorni per certificare il certificato
  • -md arg: Il message digest da usare. Possibili valori includono md5, sha1 e mdc2. Quest’opzione è applicata anche ai CRLs.
  • -policy arg: Quest’opzione definisce la policy ‘CA’ . Questa è una sezione nel file di configurazione che decide quali campi dovrebbero essere obbligatori o verificati nel certificato CA. Controllare nella sezione del FORMATO DELLA POLICY per maggiori informazioni.
  • -msie_hack: questa è un’opzione di compatibilità che serve a fare in modo che il comando ca lavori con molte delle vecchie versioni del controllo di iscrizione del Certificato IE certenr3. Essa è usata con le UniversalString per fare quasi tutto. Poiché la vecchia versione del controllo ha vari errori di sicurezza, il suo uso è fortemente scoraggiato. La versione più recente del controllo “Xenroll” non ha bisogno di quest’opzione.
  • -preserveDN: Normalmente la classe DN di un certificato è come la classe dei campi rilevata nella sezione POLICY. Quando quest’opzione è settata la classe è la stessa delle richieste. Questa è compatibile con la più vecchia versione di Controllo di Iscrizione IE che non potrebbe accettare i certificati se il loro DNs corrisponde alla classe delle richieste. Ciò non è necessario per Xenroll.
  • -batch: quest’opzione setta la modalità di batch. In questo modo nessuna domanda sarà fatta e tutti i certificati saranno certificati automaticamente.
  • -extensions section: la sezione del file di configurazione contenente le estensioni del certificato da aggiungere quando un certificato viene emesso (default x509_estensions a meno che l’opzione –extfile è usata). Se non è presente la sezione estesa allora viene creato un certificato V1. Se la sezione estesa è presente (anche se essa è vuota), allora viene creato un certificato V3.
  • -extfile file: un file di configurazione in più da cui leggere le estensioni del certificato (usando la sezione di default a meno che non viene usata anche l’opzione –extensions).
  • Opzioni CRL

  • -gencrl: quest’opzione genera una CRL basata su informazioni del file indice.
  • -crldays num: è il numero di giorni prima del prossimo CRL. Indica il numero di giorni dal tempo corrente per porre nel CRL il prossimo campo aggiornato.
  • -crlhours num: è il numero di ore prima del prossimo CRL.
  • -revoke filename: per revocare un filename contenente un certificato
  • -subj arg: sostituire il nome di battesimo del soggetto nella richiesta
  • -crlexts section: la sezione del file di configurazione contenente l’estensione da aggiungere al CRL. Se la sezione dell’estensione del CRL non è presente allora un CRL V1 viene creato, se la sezione dell’estensione del CRL è presente (anche se essa è vuota) allora un CRL V2 è creato. Le estensioni del CRL specificate sono estensioni del CRL e non estensione del CRL. Si potrebbe notare che alcuni software (per esempio Netscape) non possono trattare il CRL V2.
  • Opzioni per il File di Configurazione

    Le opzioni per ca sono contenute nella sezione ca del file di configurazione. Molte di queste sono identiche alle opzioni delle linee di comando. Se l’opzione è presente sia nel file di configurazione che nella linea di comando, allora viene usato il valore della linea di comando.
    Quando un’opzione è descritta come obbligatoria allora essa deve essere presente nel file di configurazione o nella linea di comando equivalente usata.

  • oid_file: questa specifica un file contenente OBJECT IDENTIFIERS. Ogni linea del file consisterebbe di una struttura numerica dell’identificatore dell’oggetto seguito da uno spazio bianco, poi la short name seguita da uno spazio bianco e alla fine il long name
  • oid_section: questa specifica una sezione nel file di configurazione contenente identificatori di oggetti extra. Ogni linea consisterebbe dello short name dell’identificatore dell’oggetto seguito da = e dalla struttura numerica. Lo short name e il long name sono lo stesso quando quest’opzione è usata
  • new_certs_dir: lo stesso come l’opzione della linea di comando –outdir. Essa specifica la directory dove il nuovo certificato sarà posto. E’ un’opzione obbligatoria.
  • certificate: è la stessa di _cert. Fornisce il file contenente il certificato CA. E’ obbligatoria.
  • private_key: la stessa dell’opzione –keyfile. Fornisce il file contenente la chiave privata CA. E’ obbligatoria.
  • RANDFILE: Si tratta di un file usato per leggere e scrivere informazioni su numeri casuali, o un Socket EGD (vedere RAND_egd(3)).
  • default_days: è come l’opzione –days. Il numero di giorni per certificare un certificato.
  • default_startdate: è come l’opzione –startdate. La data di inizio per certificare un certificato . Se non fissato, viene usato il tempo corrente.
  • default_enddate: è come l’opzione –enddate. O quest’opzione o default_days (o il comando di linea equivalente) devono essere presenti.
  • default_crl_hours default_crl_days: è come l’opzione –crlhours e l’opzione -crldays. Queste saranno usate solo se nessuna opzione di linea di comando è presente. Alla fine, una di queste deve essere presente per generare un CRL.
  • default_md: è come l’opzione –md. Il messaggio digest da usare. E’ un’opzione obbligatoria.
  • database: Il file del database da usare. E’ obbligatoria. Questo file deve essere presente anche se inizialmente sarà vuoto.
  • Serial file: Un file testo contenente il prossimo numero seriale. E’ obbligatorio. Questo file dovrebbe essere presente e contenere un valido numero seriale.
  • X509_extensions: è come l’opzione –exetions
  • crl_extensions: è come l’opzione –crlexts
  • preserve: è come l’opzione –preserveDN
  • msie_hack: è come l’opzione –msie_hack
  • policy: è come l’opzione –policy. Vedere la sezione del FORMATO POLICY per maggiori informazioni.
  • nameopt, certopt: queste opzioni permettono di usare un formato per visualizzare i dettagli del certificato quando si chiede all’utente di confermare la firma. Tutte le opzioni fornite dalle utilities x509, -nameopt e -certopt possono essere usate qui, tranne no_signame e no_sigdump che sono permanentemente fissate e non possono essere disabilitate (ciò spiega perché la firma del certificato non può essere visualizzata, dato che a questo punto il certificato non è stato ancora firmato). Per convenienza i valori di default _ca sono accettati da entrambi per produrre un output ragionevole. Se nessuna opzione è presente il formato usato nell’ultima versione di OpenSSL è utilizzato. L’uso del vecchio formato è fortemente scoraggiato poiché vengono visualizzati solo i campi indicati nella sezione policy, i tipi di stringhe multicarattere vengono trattati in maniera errata e inoltre non viene visualizza le estensioni.
  • copy_extensions: determina come le estensioni nei certificati richiesti dovrebbero essere trattate. Se nessuna modalità è fissata o quest’opzione non è presente allora le estensioni sono ignorate e non copiate nel certificato. Se è fissata la modalità di copia, allora alcune estensioni presenti nella richiesta sono copiate nel certificato. Se la modalità è fissata sulla copia di tutto allora tutte le estensioni nella richiesta sono copiate nel certificato: se l’estensione è già presente nel certificato, essa è cancellata prima. Vedere la sezione “WARNINGS” prima di usare quest’opzione. Il principale uso di questa opzione è di permettere a una richiesta di un certificato di fornire valore per alcune estensioni come una subjectAltName.
  • Formato Policy

    La sezione policy consiste di un insieme di variabili corrispondenti al campo DN del certificato. Se un valore viene rilevato, allora il valore del campo deve corrispondere allo stesso campo nel certificato CA. Se un valore è “supplied” allora esso deve essere presente. Se il valore è “optional” allora esso può essere presente. Alcuni campi non menzionati nella sezione policy vengono cancellati silenziosamente, a meno che l’opzione –preserveDN è settata.

    Formato Spkac

    L’input dell’opzione del comando di linea –spkac è una chiave pubblica e un challenge firmati da Netscape. Questo, di solito, deriverà dall’etichetta KEYGEN in un formato HTML per creare una nuova chiave privata. E’ comunque possibile creare SPKACs usando l’utility spkac.
    Il file conterrebbe la variabile SPKAC settata al valore SPKAC e anche la componente DN richiesta come coppia nome-valore. Se si ha bisogno di includere la stessa componente due volte allora essa può essere preceduta da un numero e da un ‘.’.

    Esempi

    NOTA: questi esempi assumono che la struttura della directory ca è già settata e il file pertinente già esiste. Ciò di solito, implica la creazione di un certificato CA e di una chiave privata con req, di un file del numero seriale e di un file indice vuoto e porre loro nelle directories pertinenti.
    Per usare il semplice file di configurazione seguente le directories demoCA, demoCA/private e demoCA/newcerts dovrebbero essere create. IL certificato CA dovrebbe essere copiato nel file demoCA/cacert.pem e la sua chiave privata nel file demoCA/private/cakey.pem. Un file demoCA/serial dovrebbe essere creato contenente per esempio “01” oltre ad un file indice vuoto demoCA/index.txt.

    1) Firmare un certificato

    2) Firmare un certificato, usando l’estensione CA

    3) Generare una CRL

    4) Firmare varie richieste

    5) Certificare un Netscape SPKAC

    6) Un semplice file SPKAC (la linea SPKAC potrebbe essere troncata per chiarezza)

    SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PdhCeV/xIxUg8V70YRxL2A5

    7) Un semplice file di configurazione con la relativa sezione per ca

    [ca]

    default_ca

    =CA_default

    #La sezione di default ca

    [CA_default]

    dir

    =demoCA

    #Top dir

    database

    =$dir/index.txt

    #File indice

    new_certs_dir

    =$dir/newcerts

    #Directory dei nuovi certificati

    certificate

    =$dir/cacert.pem

    #Il certificato CA

    serial

    =$dir/serial

    #File del numero seriale

    private_key

    =$dir/private/cakey.pem

    #La chiave privata CA

    RANDFILE

    =$dir/private/rand

    #File di dati casuali

    default_days

    =365

    #Quanto dura il certificato

    default_crl_days

    =30

    #Tempo fino al prossimo CRL

    default_md

    =md5

    #Message digest da usare

    policy

    =policy_any

    #La sezione di default di policy

    nameopt

    =default_ca

    #Opzione per mostrare il nome del soggetto

    certopt

    =default_ca

    #Opzione per mostrare il certificato

    copy_extensions

    =none

    #Non copia l'estensione del certificato

    [policy any]

    CountryName

    =supplied

    StateOrProvinceName

    =optional

    organizationName

    =optional

    organizationalUnitName

    =optional

    commonName

    =supplied

    emailAddress

    =optional

    Warnings

    Il comando ca è alquanto stravagante e allo stesso tempo assolutamente non amichevole. L’utility CA fu in origine pensato come un esempio per spiegare come le cose sarebbero dovute essere fatte in una CA. Non è stato pensato per essere usato come un CA pienamente funzionante esso stesso: alcune persone lo stanno usando per questo scopo.
    Il comando ca è in effetti un comando per singolo utente: nessun controllo viene fatto su vari files, per cui tentare di eseguire più di un comando ca sullo stesso database può avere risultati imprevedibili.

    Files

    La seguente Tabella 8.1 mostra i file per la gestione della CA.
    NOTA: la locazione di tutti i files può cambiare sia con le opzioni a tempo di compilazione, sia tramite entrate nel file di configurazione, sia tramite variabili d’ambiente o opzioni di linea di comando. I valori seguenti riflettono i valori di default.

    /usr/local/ssl/lib/openssl.cnf

    master file di configurazione

    ./demoCA

    directory principale CA

    ./demoCA/cacert.pem

    certificato CA

    ./demoCA/private/cakey.pem

    chiave privata CA

    ./demoCA/serial

    file del numero seriale

    ./demoCA/serial.old

    backup del file del numero seriale

    ./demoCA/index.txt

    file indice in formato testo

    ./demoCA/certs

    file di output del certificato

    ./demoCA/.md

    informazioni casuali CA

    Tabella 8.1: Collocazione dei files della CA

    Variabili d’Ambiente

    OPENSS_CONF riflette la locazione del file di configurazione principale; esso può essere sovrascritta dall’opzione da linea di comando –config.

    Restrizioni

    Il file indice del database è una parte critica del processo e se corrotto può essere difficile aggiustarlo. E’ teoricamente possibile ricostruire il file indice da tutti i certificati emessi e dal CRL corrente: comunque non c’è l’opzione per fare questo.
    L’entrata dell’estensione del CRL non può correntemente essere creata: solo l’estensione del CRL può essere aggiunta.
    Caratteristiche di V2 CRL come un supporto al delta-CRL e ai numeri CRL non sono correntemente supportati.
    Sebbene molte richieste possono essere introdotte e trattate in una sola volta, è possibile solo includere uno SPKAC o un certificato firmato da se stesso.

    Bugs

    L’uso si un database nella memoria può causare problemi quando un grande numero di certificati sono presenti poiché, come il nome implica, il database deve essere tenuto in memoria.
    Non è possibile certificare 2 certificati con lo stesso DN: questa è una conseguenza di come il database è indicizzato e non è possibile sistemarlo facilmente senza l’introduzione di altri problemi.
    Alcuni S/MIME clients possono usare 2 certificati con lo stesso DN per separare le firme e le chiavi di cifratura.
    Il comando ca necessita di riscrivere o la funzionalità richiesta esposta ad entrambi un comando oppure il livello di interfaccia così molte utility amiche (script Perl o GUI) possono trattare cose propriamente.
    Gli script CA.sh e CA.pl aiutano un po’ ma non molto.
    Alcuni campi in una richiesta che non sono presenti in una policy sono silenziosamente cancellati. Questo non accade se l’opzione –preserveDN è usata.
    Il comportamento dovrebbe essere più amichevole e configurabile.
    Cancellando alcuni comandi e rifiutando di voler certificare un certificato si potrebbe creare un file vuoto.

    Warnings

    L’opzione copy_extensions dovrebbe essere usata con cautela. Se non si fa attenzione allora esso potrebbe essere un rischio per la sicurezza.
    Per esempio se la richiesta di un certificato contiene una estensione basicConstraints con CA:TRUE e il valore copy_extensions è settato a copiare tutto e l’utente non tiene presente ciò quando il certificato è visualizzato allora esso tratterà il richiedente come un certificato valido CA.
    Questa situazione potrebbe essere evitata fissando copy_extensionsper copiare e includendo basicConstraints con CA:FALSE nel file di configurazione. Allora se la richiesta contiene un’estensione basicConstrains essa sarà ignorata.
    E’ consigliabile includere anche valori per altre estensioni come keyUsage per evitare una richiesta fornendo proprio il suo valore.
    Restrizioni aggiuntive possono essere poste sul certificato CA stesso.
    Per esempio, se il certificato CA contiene:

    allora anche se un certificato è emesso con CA:TRUE non sarà valido.

    Vedi Anche

    req(1), spkac(1), x509(1), CA.pl(1), config(5)

    8.2 Il comando crl

    Nome

    crl – utility CRL

    Sintassi

    openssl crl [-inform PEM|DER] [-outform PEM|DER] [-text] [-in filename] [-out filename] [-noout] [-hash] [-issuer] [-lastupdate] [-nextupdate] [-CAfile file] [-CApath dir]

    Descrizione

    Il comando crl processa il file CRL nel formato DER o PEM.

    Opzioni del comando

  • -inform DER|PEM specifica il formato di input. Il formato DER è una struttura CRL codificata DER. PEM (di default) è una versione codificata base64 del formato DER con linee di intestazione e di chiusura.
  • -outform DER|PEM specifica il formato di output, le opzioni hanno lo stesso significato dell’opzione –inform.
  • -in filename specifica il nome del file di input da cui leggere oppure lo standard input se questa opzione non è specificata.
  • -out filename specifica il nome del file di output in cui scrivere oppure lo standard output di default.
  • -text stampa il CRL in formato testo.
  • -noout non da in output la versione codificata del CRL.
  • -hash da in output il valore hash del nome dell’emittente. Esso può essere usato per vedere CRL in una directory attraverso il nome dell’emittente.
  • -issuer da in output il nome dell’emittente.
  • -lastupdate da in output il campo lastUpdate.
  • -nextupdate da in output il campo nextUpdate.
  • -Cafile file verifica la firma sul CRL guardando il certificato emesso nel file.
  • -CApath dir verifica la firma sul CRL guardando il certificato emesso nella directory. Questa directory deve essere la directory dei certificati standard: cioè un valore hash di ogni subject name(usando x509 -hash) deve essere unito ad ogni certificato.
  • Note

    Il formato PEM CRL usa le seguenti linee di intestazione e chiusura:

    Esempi

    1) Converte un file CRL da PEM a DER

    2) L’output del formato testo del certificato codificato DER:

    Bugs

    Idealmente dovrebbe essere possibile creare un CLR usando opzioni appropriate e vari file.

    Vedi Anche

    crl2pkcs7(1), ca(1), x509(1)

    Il comando crl2pkcs7

    Nome

    crl2pkcs7 – crea una struttura PKCS#7 da un CRL e certificati.

    Sintassi

    openssl pkcs7 [-inform PEM | DER] [-outform PEM | DER] [-in filename] [-out filename] [-print_certs]

    Descrizione

    Il comando crl2pkcs7 prende un CRL opzionale e uno o più certificati e li converte in una struttura “certificate only” PKCS#7.

    Opzioni del Comando

  • -inform DER|PEM specifica il formato di input. Il formato DER è una struttura CRL codificata DER. PEM (di default) è una versione codificata base64 del formato DER con linee di intestazione e di chiusura.
  • -outform DER|PEM specifica il formato di output, le opzioni hanno lo stesso significato dell’opzione –inform.
  • -in filename specifica il nome del file di input da cui leggere oppure lo standard input se questa opzione non è specificata.
  • -out filename specifica il nome del file di output in cui scrivere oppure lo standard output di default.
  • -certfile filename specifica il nome del file contenete uno o più certificati nel formato PEM. Tutti i certificati nel file saranno aggiunti alla struttura PKCS#7. Questa opzione può essere usata più di una volta per leggere certificati da file multipli.
  • -nocrl Normalmente un CRL viene incluso nel file di output. Con questa opzione nessun CRL è incluso nel file di output e il CRL non viene letto dal file di input.
  • Esempi

    1) Crea una struttura PCKS#7 da un certificato e CRL:

    2) Crea una struttura PCKS#7 nel formato DER senza alcun CRL da vari differenti certificati:

    Note

    Il file di output è una strtuttura dati firmata PKCS#7 contenente nessuna firma, solo certificati e CRL opzionali.
    Questa utility può essere utilizzata per inviare certificati e CAs per Netscape come parte del processo di iscrizione del certificato. Questo include l’invio dell’output codificato DER come MIME type application/x-x509-user-cert.
    Il formato codificato PEM con le linee di intestazione e di chiusura rimosse può essere usato per installare i certificati degli utenti e Cas in MSIE che usa il controllo Xenroll.

    8.4 Il comando ocsp

    Nome

    ocsp – Online Certificate Status Protocol utility

    Sintassi

    openssl ocsp [-out file] [-issuer file] [-cert file] [-serial n] [-req_text] [-resp_text] [-text] [-reqout file] [-respout file] [-reqin file] [-respin file] [-nonce] [no_nonce] [-url responder_url] [-host host:n] [-path] [-CApath file] [-CAfile file] [-VAfile file] [-verify_certs file] [-noverify] [-trust_other] [-no_intern] [-no_sig_verify] [-no_cert_verify] [-no_chain] [-no_cert_checks] [-validity_period nsec] [-status_age nsec]

    Descrizione

    ATTENZIONE: questa è una documentazione preliminare e soggetta a cambiamenti.
    L’OCSP (Online Certificate Status Protocol) abilita le applicazioni a determinare lo stato (revoca) di un certificato identificato (RFC 2560).
    Il comando ocsp esegue molti compiti comuni di OCSP. Esso può essere usato per stampare richieste e risposte, creare richieste ed inviare domande ad un OCSP che risponde.

    Opzioni del Comando

  • -out nome_file Specifica il nome del file di output. Per default viene utilizzato lo standard output.
  • -issuer nome_file Specifica il corrente emittente del certificato. Questa opzione può essere utilizzata molte volte. Il certificato specificato nel file deve essere in formato PEM.
  • -cert nome_file Aggiunge un nome di file di certificato alla richiesta. L’emittente del certificato è preso dalla precedente opzione issuer. Se tale opzione non è stata specificata, viene generato un errore.
  • -serial num E’ lo stesso dell’opzione cert tranne che alla richiesta viene aggiunto il certificato con numero seriale num. Il numero seriale è interpretato come un intero decimale a meno che non è preceduto da 0x. Possono anche essere specificati interi negativi facendo precedere il valore dal segno meno (-).

  • -signer nome_file, -signkey nome_file Firmano la richiesta OCSP usando il certificato specificato nell’opzione signer e la chiave privata specificata nell’opzione signkey. Se l’opzione signkey non è presente, allora la chiave privata viene letta dallo stesso file del certificato. Se neanche l’opzione signer è specificata, allora la richiesta OCSP non viene firmata.
  • -nonce, -no_nonce Aggiunge una estensione OCSP nonce alla richiesta o disabilita l’aggiunta. Normalmente, se una richiesta OCSP viene data in input con l’opzione respin non viene aggiunto il nonce: usando l’opzione nonce si forzerà l’aggiunta dell’estensione nonce. Se si sta creando una richiesta OCSP (usando le opzioni cert e serial) una estensione nonce viene aggiunta automaticamente. Essa può essere eliminata con no_nonce.
  • -req_text, -resp_text, -text Stampano il formato testuale della richiesta OCSP, della risposta o di entrambi.
  • -reqout file, -respout file Scrive la richiesta di certificato o la risposta in codifica DER nel file indicato.
  • -reqin, -respin Legge la richiesta OCSP o il file di risposta dal file indicato. Queste opzioni vengono ignorate se vengono usate altre opzioni che causano la creazione della richiesta o della risposta OCSP (come le opzioni serial, cert e host).
  • -url responder_url Specifica l’URL che deve rispondere. Possono essere specificati sia URL http che HTTPS (SSL/TLS).
  • -host hostname:port, -path pathname Se è presente l’opzione host allora la richiesta OCSP è inviata all’host indicato sulla porta indicata. L’opzione path specifica il pathname http oppure ‘/’ per default.
  • -CAfile file, -CApath pathname Indicano il file o il pathname contenenti i certificati CA fidati. Questi vengono usati per verificare le firme sulle risposte OCSP.
  • -verify_certs file Indica un file contenente certificati addizionali da cercare quando si tenta di identificare il certificato che firma una risposta OCSP. In alcuni casi, chi risponde omette il certificato della firma dalla risposta: questa opzione può, allora, essere usata per fornire il certificato necessario in casi del genere.
  • -trust_other I certificati specificati dall’opzione –verify_certs dovrebbero essere accettati esplicitamente, senza effettuare controlli addizionali su di loro. Questo è utile quando l’intera catena di certificati di chi risponde non è disponibile o perché fidarsi di una root non è appropriato.
  • -VAfile file File contenente certificati di utenti di cui fidarsi esplicitamente. E’ equivalente alle opzioni –verify_cert e –trust_other.
  • -noverify Non tentare di verificare la firma della risposta OCSP o i valori del nonce. Questa opzione di solito viene usata solo per motivi di debug, dato che essa disabilita tutti i controlli sui certificati di chi risponde.
  • -no_intern Ignora i certificati contenuti nella risposta OCSP quando sta cercando i certificati del firmatario. Con questa opzione, il certificato del firmatario deve essere specificato o con l’opzione verify_certs o con l’opzione VAfile.
  • -no_sig_verify Non controllare la firma sulla risposta OCSP. Dato che questa opzione tollera firme non valide sulle risposte OCSP essa, normalmente, sarà usata solo per scopi di testing.
  • -no_cert_verify Non verificare il certificato di chi firma la risposta OCSP. Dato che questa opzione consente a risposte OCSP di essere firmate da qualsiasi certificato essa viene, di solito usata solo per scopi di testing.
  • -no_chain non usare certificati nella risposta come certificati addizionali di CA non fidate.
  • -no_cert_checks Non eseguire controlli addizionali sui certificati di chi firma le risposte OCSP. E’ equivalente a dire di non effettuare controlli per vedere se il certificato di chi firma è autorizzato a fornire le necessarie informazioni di stato: come conseguenza, questa opzione dovrebbe essere usata solo per scopi di testing.
  • -validity_period nsec, -status_age age Queste opzioni specificano l’intervallo di tempo, in secondi, che sarà tollerato in una risposta OCSP. Ogni stato di certificato di risposta contiene un campo notBefore ed un campo opzionale notAfter. Il tempo corrente deve cadere tra questi due valori, ma l’intervallo tra i due tempi potrebbe essere solo di pochi secondi. In pratica, i clock del cliente e di chi risponde potrebbero non essere precisamente sincronizzati e, quindi, un controllo del genere potrebbe fallire. Per evitare ciò, può essere usata l’opzione validità_period per specificare un intervallo di errore accettabile in secondi. Il valore di default è di 5 minuti. Se il tempo notAfter viene omesso dalla risposta, ciò significa che una nuova informazione di stato è immediatamente disponibile. In questo caso, l’età del campo notBefore viene controllata per verificare che essa non sia più vecchia di age secondi. Per default, questo controllo addizionale non viene eseguito.
  • Verifica della Risposta OCSP

    La risposta OCSP segue le regole specificate in RFC2560.

    Inizialmente viene individuato il certificato di chi da la risposta OCSP e viene controllata la firma sulla richiesta OCSP usando la chiave pubblica del certificato di chi risponde.

    Poi viene effettuata una normale verifica del certificato sul certificato del rispondente costruendo una catena di certificati nel processo. Le locazioni dei certificati fidati usati per costruire la catena possono essere specificati con le opzioni CAfile e CApath oppure possono essere cercati nella directory standard dei certificati OpenSSL.

    Se la verifica iniziale fallisce, allora il processo di verifica OCSP si ferma con un errore.

    Altrimenti il certificato CA emesso nella risposta viene confrontato con il certificato del rispondente OCSP: se c’è una corrispondenza allora la verifica OCSP ha successo.

    Altrimenti la CA del certificato di chi ha risposto viene controllata tramite il certificato della CA emesso nella richiesta. Se esiste una corrispondenza e nel certificato del rispondente è presente l’uso della chiave estesa OCSPSigning allora la verifica OCSP ha successo.

    Altrimenti la root CA del CA rispondente OCSP viene verificata per controllare se è fidata per la firma OCSP. Se ciò è vero, la verifica OCSP ha successo.

    Se nessuno di questi controlli ha successo, allora la verifica OCSP fallisce.

    Ciò che questo significa effettivamente è che se il certificato del rispondente OCSP è autorizzato direttamente dal CA, se esso sta rilasciando informazioni di revoca (e se è correttamente configurato), allora la verifica avrà successo.

    Se il rispondente OCSP è un rispondente globale che può dare dettagli su diverse CA ed ha una sua propria catena di certificati separata, allora la sua root CA può essere fidata per la firma OCSP. Per esempio:

    In alternativa, il certificato del rispondente stesso può essere reso esplicitamente fidato con l’opzione VAfile.

    Note

    Come notato, molte delle opzioni di verifica servono solo a scopi di testing e debug. Normalmente solo le opzioni CApath, CAfile e (se il rispondente è un global VA) VAfile sono necessarie.

    Esempi

    1) Creare una richiesta OCSP e scriverla in un file:

    2) Inviare una richiesta ad un rispondente OCSP con URL http://ocsp.myhost.com/, salvare la risposta in un file e stamparla in formato testo:

    3) Leggere una risposta OCSP e stamparla in formato testo:

    8.5 Il comando req

    Nome

    req – utility di richiesta e generazione di certificati PKCS#10.

    Sintassi

    openssl req [-inform PEM | DER] [-outform PEM | DER] [-in filename] [-passin arg] [-out filenam] [-passout arg] [-text] [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits] [-newkey dsa:file] [-nodes] [-key filename] [-keyform PEM | DER] [-keyout filename] [-[mda5 | sha1 | md2 | mdc2]] [-config filename] [-subj arg] [-x509] [-days n] [-set_serial n] [-asn1 –kludge] [-newhdr] [-extensions section] [-reqexts section] [-batch] [-verbose].

    Descrizione

    Il comando req principalmente crea e processa richieste di certificati in formato PKCS#10. Esso può, addizionalmente, creare certificati firmati da se stesso da usare, per esempio, come root CA.

    Opzioni del Comando

  • -inform PEM | DERSpecifica il formato di input. Il formato DER è una struttura ASN1 DER codificata in forma compatibile con PKCS#10. Il formato PEM (che è quello di default) è una versione codificata base64 del formato DER con linee di intestazione e chiusura.
  • -outform PEM | DER Specifica il formato di output. Le opzioni hanno lo stesso significato dell’opzione –inform.
  • -in filename Specifica il nome del file di input da cui leggere una richiesta o lo standard input se questa opzione non viene specificata. Una richiesta viene letta solo se le opzioni di creazione (-new e –newkey) non sono specificate.
  • -passin arg Il file sorgente delle password di input. Per maggiori informazioni sul formato di arg vedere la sezione PASS PHRASE ARGUMENTS in openssl(1).
  • -out filename Specifica il nome del file di output su cui scrivere o lo standard output per default.
  • -passout arg Specifica il file sorgente delle password di output. Per maggiori informazioni sul formato di arg vedere la sezione PASS PHRASE ARGUMENTS in openssl(1).
  • -text Stampa la richiesta di certificato in formato testo.
  • -noout Evita l’output della versione codificata della richiesta.
  • -modulus Stampa il valore del modulo della chiave pubblica contenuto nella richiesta.
  • -verify Verifica la firma sulla richiesta.
  • -new Questa opzione genera una nuova richiesta di certificato. Essa stamperà i valori dei campi rilevanti dell’utente. I campi che vengono stampati e le loro dimensioni massima e minima sono specificati nel file di configurazione ed in ogni estensione richiesta. Se l’opzione –key non viene usata, sarà generata una nuova chiave privata RSA usando le informazioni specificate nel file di configurazione.
  • -rand file(s) Uno o più file contenenti dati casuali usati per inizializzare il generatore di numeri casuali, o un socket EGD (vedi RAND_egd(3)). File multipli possono essere specificati separati da un carattere dipendente dal sistema operativo. Il separatore è ‘;’ per MS-Windows, ‘,’ per OpenVMS e ‘:’ per tutti gli altri.
  • -newkey arg Crea una nuova richiesta di certificato ed una nuova chiave privata. L’argomento può assumere una delle seguenti due forme: rsa:nbits, in cui nbits è il numero di bits, genera una chiave RSA con dimensione nbits; dsa:filename genera una chiave DSA usando i parametri nel file filename.
  • -key filename Specifica il file da cui leggere la chiave privata. Esso accetta anche chiavi private in formato PKCS#8 per file in formato PEM.
  • -keyform PEM | DER Il formato del file della chiave privata specificata nell’argomento –key. Per default si usa il formato PEM.
  • -keyout filename Indica il nome del file in cui scrivere la chiave privata appena creata. Se questa opzione non viene specificata, viene usato il nome del file presente nel file di configurazione.
  • -nodes Se questa opzione viene specificata, allora quando viene creata una nuova chiave privata essa non viene cifrata.
  • -[md5 | sha1 | md2 | mdc2] Specifica il tipo di message digest con cui firmare la richiesta. Questo sovrascrive l’algoritmo digest specificato nel file di configurazione. In caso di richiesta DSA questa opzione viene ignorata, dato che in tal caso viene usato sempre SHA1.
  • -config filename Consente di specificare un file di configurazione alternativo. Questo file sostituisce il nome del file a tempo di compilazione o qualsiasi altro specificato nella variabile di ambiente OPENSSL_CONF.
  • -subj arg Setta il nome del soggetto per nuove richieste o soprassiede sul nome del soggetto quando sta verificando una richiesta.
  • -x509Questa opzione da in output un certificato firmato da se stesso invece che una richiesta di certificato. Essa è tipicamente usata per generare certificati di test o una root CA firmata da se stesso. Le estensioni aggiunte al certificato (se ve ne sono) sono specificate nel file di configurazione. A meno che non sia specificato altrimenti usando l’opzione set_serial, il numero 0 sarà usato come numero seriale.
  • -days n Quando viene usata l’opzione –x509, questa specifica il numero di giorni di validità del certificato. Per default, tale numero è 30 giorni.
  • -set_serial n Numero seriale da usare quando si da in output un certificato firmato da se stesso. Questo può essere specificato come un valore decimale o esadecimale (facendolo precedere con 0x). E’ possibile, ma non raccomandato, usare numeri seriali negativi.
  • -extensions section, -reqexts section Queste opzioni specificano sezioni alternative da includere come estensioni del certificato (se è presente l’opzione –x509) o come estensioni alla richiesta di certificato. Ciò consente di usare diverse differenti sezioni nello stesso file di configurazione per specificare richieste per diversi scopi.
  • -asn1-kludge Per default, il comando req dà in output le richieste di certificati non contenenti attributi nel formato PKCS#10 corretto. Comunque, alcune CA accettano solo richieste che non contengano attributi in forma non valida; questo attributo produce questo formato non valido. Più precisamente, gli attributi in una richiesta di certificato PKCS#10 sono definiti come un SET OF Attribute. Essi non sono opzionali, per cui se non è presente alcun attributo, tale situazione deve essere codificata come un insieme vuoto. La forma non valida, invece, non include l’insieme vuoto.Si noti, comunque, che sono davvero poche le CA che richiedono ancora l’uso di questo attributo.
  • -newhdr Aggiunge la parola NEW alle linee di intestazione e termine del file PEM delle richieste date in output. Alcuni software (Netscape certificate server) ed alcune CA hanno bisogno di questa opzione.
  • -batch Modalità non interattiva.
  • -verbose Stampa dettagli extra sulle operazioni in esecuzione
  • Formato del File di Configurazione

    Le opzioni di configurazione sono specificate nella sezione req del file di configurazione. Come con tutti i file di configurazione, se nessun valore viene specificato nella sezione specifica (cioè, req) allora viene ricercata anche una sezione iniziale senza nome o una sezione di default.
    Le opzioni disponibili sono descritte in dettaglio di seguito.

  • input_password output_password Le password per il file di input delle chiavi private (se esiste) e per il file di output delle chiavi private (se ne verrà creato uno). Le opzioni a linea di comando passin e passout modificano questi valori del file di configurazione.
  • default_bits Specifica la dimensione della chiave di default in bits. Se non è specificato, viene usato 512. Esso viene usato se viene utilizzata l’opzione –new. Esso può essere soprascritto tramite l’opzione newkey.
  • default_keyfile E’ il nome del file di default su cui scrivere le chiavi private. Se non è specificato, la chiave viene scritta sullo standard output. Esso può essere soprascritto usando l’opzione –keyout.
  • oid_file Specifica un file contente OBJECT IDENTIFIERS addizionali. Ogni linea del file dovrebbe consistere di un formato numerico dell’identificatore di oggetto seguito da uno spazio bianco, dal nome breve, da un altro spazio bianco ed infine dal nome lungo.
  • oid_section Specifica una sezione nel file di configurazione contenente identificatori di oggetti extra. Ogni linea dovrebbe consistere del nome breve dell’identificatore dell’oggetto, seguito da un segno ‘=’ e dal formato numerico. Quando viene usata questa opzione, il nome lungo ed il nome corto sono gli stessi.
  • RANDFILE Specifica il nome di un file in cui vengono inserite e da cui vengono lette le informazioni di inizializzazione dei numeri casuali, oppure un socket EGD (vedi RAND_egd(3)). Questa opzione viene usata per la generazione della chiave privata.
  • encrypt_key Se questa opzione è settata a no, allora se una chiave privata viene generata, essa non viene cifrata. Questa è equivalente all’opzione di linea di comando –nodes. Per compatibilità, esiste un’opzione equivalente che è encrypt_rsa_key.
  • default_md Questa opzione specifica l’algoritmo digest da usare. Possibili valori includono md5, sha1 e mdc2. Se non è specificato, viene usato l’algoritmo MD5. Questa opzione può essere modificata a linea di comando.
  • string_mask Questa opzione maschera l’uso di alcuni tipi di stringhe in alcuni campi. Molti utenti non hanno bisogno di modificare questa opzione. Essa può essere settata a diversi valori. Per default (che è anche l’opzione di default) usa PrintableStrings, T61Strings e BMPStrings. Se viene usato il valore pkix allora saranno usati solo PrintableStrings e BMPStrings. Questo segue le raccomandazioni PKIX in RFC2459. Se viene usata l’opzione utf8only allora sarà usata solo UTF8Strings: questa è la raccomandazione PKIX in RFC2459 dopo il 2003. Infine, l’opzione nombstr usa PrintableStrings e T61Strings: certi software hanno problemi con BMPStrings e UTF8Strings (come ad esempio Netscape).
  • req_extensions Specifica la sezione del file di configurazione contenente una lista di estensioni da aggiungere alla richiesta di certificato. Essa può essere modificata dallo switch a linea di comando –reqexts.
  • x509_extensions Specifica la sezione del file di configurazione contenente una lista di estensioni da aggiungere al certificato generato quando lo switch –x509 viene usato. Essa può essere modificata tramite lo switch a linea di comando –extensions.
  • prompt Se è settato al valore no, esso disabilita il prompt dei campi del certificato e prende solo valori direttamente dal file di configurazione. Essa modifica anche il formato del distingueshed_name e le sezioni degli attributi.
  • attributes Questo specifica la sezione contenente gli attributi della richiesta: il suo formato è lo stesso del distinguished_name. Tipicamente, esso dovrebbe contenere i tipi challengePassword e unstructuredName. Attualmente, essi sono ignorati dalle utility di firma dei certificati OpenSSL, ma alcune CA potrebbero richiederli.
  • distinguished_name Questo specifica la sezione contenente i campi distinguished name da mostrare quando viene generato un certificato o una richiesta di certificato. Il formato è descritto nella prossima sezione.
  • Formato delle sezioni DISTINGUISHED NAME ed ATTRIBUTES

    Ci sono due formati separati per le sezioni distinguished name e attributes. Se l’opzione prompt è settata a no, allora questa sezioni consistono solo di nomi e valori di campi. Ad esempio:

    Ciò consente a programmi esterni (come quelli basati su GUI) di generare un file template con tutti i nomi ed i valori dei campi e di passarlo a req. Un esempio di questo tipo di file di configurazione è contenuto nella sezione ESEMPI.
    In alternativa, se l’opzione prompt è assente o non è settata a no, allora il file contiene informazioni sui campi da mostrare. Esso consiste di linee della forma:

    fieldName è il nome del campo che bisogna usare, come ad esempio commonName (o CN). La stringa prompt è usata per chiedere all’utente di inserire dettagli rilevanti. Se l’utente non inserisce niente, allora viene usato il valore di default. Se nessun valore di default è presente, allora il campo viene omesso. Un campo può inoltre essere omesso anche se è presente un valore di default semplicemente inserendo il carattere ‘.’.
    Il numero di caratteri inseriti deve essere compreso tra i limiti fieldName_min e fieldName_max: ci potrebbero anche essere delle ulteriori restrizioni basate sul particolare campo da usare (per esempio, countryName potrebbe dover essere sempre di due caratteri e dovrebbe essere dato solo in formato PrintableString).
    Alcuni campi (come organizationName) possono essere usati più di una volta in un DN. Ciò può presentare problemi dato che i file di configurazione non riconoscono lo stesso nome presente due volte. Per evitare questo problema, se il fieldName contiene qualche carattere seguito da un full stop, essi saranno ignorati. Così, quindi, un secondo organizationName può essere inserito chiamandolo “1.organizationName”.
    I nomi di campi attualmente permessi sono tutti i nomi lunghi o corti degli identificatori di oggetti. Questi sono compilati in OpenSSL e includono i soliti valori come commonName, countryName, localityName, organizationName, organizationUnitName, stateOrProvinceName. In aggiunta, sono presenti anche emailAddress, name, surname, givenName, initials e dnQualifier.
    Identificatori di oggetti addizionali possono essere definiti con le opzioni oid_file e oid_section nel file di configurazione. Ogni campo addizionale sarà trattato come una DirectoryString.

    Esempi

    1) Esamina e verifica la richiesta di certificato:

    2) Crea una chiave privata e poi genera una richiesta di certificato da essa:

    3) Lo stesso dell’esempio 2 ma usando solo req:

    4) Genera un certificato di root firmato da se stesso:

    5) Esempio di un file puntato da una opzione oid_file:

    6) Esempio di una sezione puntata da oid_section usando la variabile di espansione:

    7) Semplice file di configurazione che richiede i valori dei campi:

    8) Semplice configurazione contenete tutti i valori dei campi:

    Note

    Le linee di intestazione e terminazione del formato PEM sono normalmente:

    Alcuni software (alcune versioni di Netscape certificate server) invece richiedono:

    che vengono prodotte con l’opzione –newhdr ma sono comunque compatibili. Entrambe le forme sono accettate in maniera trasparente in input.
    Le richieste di certificato generate da Xenroll con MSIE hanno estensioni aggiunte. Esse includono l’estensione keyUsage che determina il tipo di chiave (solo firma o general purpose) ed ogni OID addizionale inserito dallo script in una estensione extendedKeyUsage.

    Diagnostica

    I seguenti messaggi vengono presentati frequentemente:

    Ciò è seguito un po’ di tempo dopo da…

    Il primo messaggio di errore è il clue: non è possibile trovare il file di configurazione! Certe operazioni (come l’esame di una richiesta di certificato) non hanno bisogno di un file di configurazione, per cui il suo utilizzo non è obbligatorio. La generazione di certificati o richieste non ha bisogno di un file di configurazione. Questo potrebbe essere visto come un bug.
    Un altro messaggio oscuro è il seguente:

    che viene mostrato quando non sono presenti attributi e la richiesta include il corretto insieme vuoto (la codifica DER del quale è 0xa0 0x00). Se, invece, appare solo

    allora l’insieme vuoto è mancante e la codifica è tecnicamente non valida (ma è tollerata). Per maggiori informazioni vedere la descrizione dell’opzione a linea di comando –asn1-kludge.

    Variabili d’Ambiente

    La variabile OPENSSL_CONF, se definita, consente di specificare una locazione di un file di configurazione alternativo. Essa può essere modificata con lo switch a linea di comando –config. Per ragioni di compatibilità, anche la variabile d’ambiente SSLEAY_CONF serve per lo stesso scopo, ma il suo uso è scoraggiato.

    Bugs

    La gestione da parte di OpenSSL delle T61Strings (aka TeletexStrings) è sbagliata: esso, in effetti, le tratta come ISO-8859-1 (Latin 1) (Netscape e MSIE hanno un comportamento simile). Questo può causare problemi se si ha bisogno di caratteri non disponibili in PrintableStrings e non si vuole usare BMPStrings.
    Come conseguenza della gestione di T61Strings, l’unico modo di rappresentare caratteri accentati è di usare le BMPStrings: sfortunatamente, Netscape attualmente ha degli errori su tali stringhe. Se si ha bisogno di usare caratteri accentati su Netscape e MSIE, allora bisogna per forza usare la forma non valida di T61Strings.
    La presentazione delle domande a video non è molto amichevole. Essa non consente di confermare ciò che si è appena digitato. Altre cose, come le estensioni alle richieste di certificato possono essere definite solo staticamente nel file di configurazione. Alcune di esse, invece, come l’indirizzo e-mail nel subjectAltName potrebbero essere inserite dall’utente.

    Vedi Anche

    x509(1), ca(1), genrsa(1), gendsa(1), config(5).

    8.6 Il comando verify

    Nome

    verify - Utility per verificare i certificati

    Sintassi

    openssl verify [-CApath directory] [-CAfile file] [-purpose purpose] [-untrusted file] [-help] [-issuer_checks] [-verbose] [-] [certificates]

    Descrizione

    Il comando verify verifica catene di certificati.

    Opzioni del Comando

  • -CApath directory: una directory di certificatifidati. I certificati potrebbero avere nomi del tipo: hash.0 o avere dei link simbolici di questo tipo verso di loro (“ hash “ è il subject name del certificato hashed :vedi opzione –hash delle utility di x509). Sotto unix lo script c_rehash crea automaticamente link simbolici alla directory dei certificati.
  • -CAfile file: un file di certificati fidati. Il file contiene certificati multipli nel formato PEM concatenati insieme.
  • -untrusted file: un file di certificati non fidati. Il file contiene certificati multipli.
  • -purpose pur pose: l’uso proposto per i certificati. Senza questa opzione nessuna verifica a catena viene fatta. Generalmente gli usi indiscussi sono sslclient, sslserver, nssslserver, smimesign, smimeencrypt. Per ulteriori informazioni vedi la sezione OPERAZIONI DI VERIFICA.
  • -help: stampa un messaggio per l’uso.
  • -verbose: stampa informazioni extra circa le operazione che devono essere effettuate
  • -issuer_checks: stampa diagnosi relative alla ricerca per il certificato dell’emittente del certificato corrente. Ciò mostra perché qualche certificato dell’emittente candidata viene rifiutato. Comunque la presenza di messaggi rifiutati non implica che qualcosa sia sbagliato: durante il normale processo di verifica si possono verificare vari rifiuti.
  • -: contrassegna l’ultima opzione. Tutti gli argomenti che la seguono sono considerati essere file di certificati. Questa è utile se il filename del primo certificato incominci con - .
  • certificates: uno o più certificati da verificare. Se nessun filename di certificati è incluso allora viene fatto un tentativo per leggere un certificato dallo standard input. Dovrebbero essere tutti nel formato PEM.
  • Operazioni di verifica

    Il programma di verifica usa le stesse funzioni del internal SSl e S/MIME verification, quindi questa descrizione viene applicata anche a queste operazioni di verifica
    C’è una differenza cruciale tra le operazioni di verifica realizzate dal programma di verifica:
    quando possibile viene fatto un tentativo per continuare dopo mentre le operazioni di verifica si fermano sul primo errore. Questo permette di determinare tutti i problemi che si hanno con una catena di certificati.
    Le operazioni di verifica consistono di un numero di passi separati.
    Per prima cosa una catena di certificati è costruita partendo dal certificato fornito e finisce nella root CA. Un errore si ha se l’intera catena non può essere costruita. La catena è costruita controllando il certificato dell’emittente del certificato corrente. Se viene trovato un certificato che è esso stesso distributore si assume essere la root CA.
    Lo stesso processo di guardare i distributori dei certificati richiede un numero di passi. Nella versione prima di opensssl 0.9.5 il primo certificato il cui subject name combaciava con il distributore del certificato corrente era presunto essere il certificato dei distributori.
    Da openssl 0.9.6 tutti i certificati il cui subject name combacia con il iusser name del corrente certificato sono soggetti ad altri test. I relativi componenti dell’autorità per l’identificazione della chiave del certificato corrente (se presente) deve combaciare con il subject key identifier (se presente), l’emittente e il numero seriale del candidato emittente, in più la keyUsage extension del candidato emittente (se presente) deve permettere la firma del certificato.
    Per prima cosa si vede nella lista dei certificati non fidati e se non vi è un match si vanno a vedere i certificati fidati.
    La root CA è sempre in alto nella lista dei certificati fidati: se il certificato da verificare è un certificato root allora esattamente un match viene trovato nella lista dei fidati.
    La seconda operazione è di verificare tutte le estensioni dei certificati non fidati per coerenza con gli scopi forniti. Se l’opzione –purpose non è inclusa allora nessun controllo viene effettuato. Il certificato fornito deve avere una estensione compatibile con gli scopi forniti e tutti gli altri certificati devono anche essere certificati CA validi. Le estensioni precise richieste sono descritte con più dettaglio nella sezione CERTIFICATE EXTENTION dell’utility x509.
    La terza operazione è di verificare i trust setting sulla root CA. La root CA dovrebbe essere validata per gli scopi forniti. Per la compatibilità con le versioni precedenti di ssleay e openssl un certificato senza trust setting è considerato essere valido per tutti gli scopi.
    L’operazione finale è quella di verificare la validità della catena di certificati. Il periodo di validità è verificato con il tempo corrente di sistema e i dati notBefore e notAfter del certificato.
    Le firme del certificato sono anche verificate in questo punto.
    Se tutte le operazioni sono completate con successo allora il certificato è considerato valido. Se qualche operazione fallisce il certificato non è valido.

    Diagnostica

    Quando un operazione di verifica fallisce il messaggio di output potrebbe essere qualcosa di cifrato.
    La forma generale del messaggio di errore è:

    la prima linea contiene il nome del certificato che deve essere verificato seguito dal subject name del certificato. La seconda linea contiene il numero dell’errore e la profondità. La profondità è il numero di certificati già verificati quando il problema è stato trovato partendo con zero per il certificato già verificato poi 1 per il CA che ha firmato il certificato e così via. Infine viene presentata una versione testuale dei numeri degli errori.
    Una lista esaustiva di messaggi e codici di errore è mostrata di seguito, questa include il nome del codice di errore così come è definito nel file header x509.vfy.h. Alcuni codici di errore sono definiti ma mai restituiti: questi sono descritti come “unused”.

    0 X509_V_OK
    l’operazione ha avuto successo.
    2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
    il certificato del distributore non è stato trovato: questo succede se il certificato del distributore di un certificato non fidato non può essere trovato.
    3 X509_V_ERR_UNABLE_TO_GET_CRL
    il CRL di un certificato non è stato trovato.
    4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
    la firma del certificato non può essere decifrato. Questo significa che il valore attuale della firma non può essere determinato piuttosto che esso non corrisponde al valore aspettato, questo ha senso solo per le chiavi RSA.
    5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
    la firma CRL non può essere decifrata: questo significa che il valore attuale della firma non può essere determinato piuttosto che esso non corrisponde al valore atteso.
    6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
    la chiave pubblica nel certificato SubjectPublicKeyInfo non può essere letta.
    7 X509_V_ERR_CERT_SIGNATURE_FAILURE
    la firma del certificato non è valida.
    8 X509_V_ERR_CRL_SIGNATURE_FAILURE
    la firma del certificato non è valida.
    9 X509_V_ERR_CERT_NOT_YET_VALID
    il certificato non è ancora valido : la data notBefore viene dopo il tempo corrente.
    10 X509_V_ERR_CRL_NOT_YET_VALID
    il CRL non è ancora valido.
    11 X509_V_ERR_CERT_HAS_EXPIRED
    il certificato è scaduto : la data notAfter viene prima del tempo corrente.
    12 X509_V_ERR_CRL_HAS_EXPIRED
    il CRL è scaduto
    13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
    il campo notBefore del certificato contiene un tempo non valido.
    14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
    il campo notAfter del certificato contiene un tempo non valido.
    15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
    il campo lastUpdate del CRL contiene un tempo non valido.
    16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
    il campo nextUppdate del CRL contiene un tempo non valido.
    17 X509_V_ERR_OUT_OF_MEM
    si è verificato un errore tentando di allocare memoria. Ciò non dovrebbe mai accadere.
    18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
    il certificato passato è auto firmato e lo stesso certificato non può essere trovato nella lista dei certificati fidati.
    19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
    la catena di certificati può essere costruita usando certificati non fidati ma la root potrebbe non essere trovata localmente.
    20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
    l’emittente dei certificati localmente visti non può essere trovata. Questo significa che la lista dei certificati fidati è incompleta.
    21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
    nessuna firma può essere verificata perché la catena contiene solo un certificato e non è auto firmato.
    22 X509_V_ERR_CERT_CHAIN_TOO_LONG
    la lunghezza della catena di certificati è più lunga della massima profondità supportata.
    23 X509_V_ERR_CERT_REVOKED
    il certificato è stato revocato
    24 X509_V_ERR_INVALID_CA
    Un certificato CA è non valido. Non è un CA o le sue estensioni non corrispondono con gli scopi forniti
    25 X509_V_ERR_PATH_LENGTH_EXCEEDED
    è stato superato il parametro basicConstraints per la lunghezza della path
    26 X509_V_ERR_INVALID_PURPOSE
    il certificato fornito non può essere utilizzato per scopi specifici.
    27 X509_V_ERR_CERT_UNTRUSTED
    la root CA non è marcata come trusted per gli scopi specifici
    28 X509_V_ERR_CERT_REJECTED
    la root CA è marcata per rifiutare scopi specifici
    29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
    il candidato corrente per la distibuzione del certificato è stato rifiutato perché il suo subject name non combacia con l’iusser name del certificato corrente. Viene visualizzato solo quando l’opzione - issuer_checks è settata.
    30 X509_V_ERR_AKID_SKID_MISMATCH
    il candidato corrente per la distribuzione del certificato è stato rifiutato perché il suo subjec key identifier è presente e non combacia con il certificato dell’authority key identifier. Viene visualizzato solo quando l’opzione -issuer_checks è settata.
    31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
    il candidato corrente per la distribuzione del certificato è stato rifiutato perché il suo iusser name e il suo serial number sono presenti e non combaciano con il certificato del authority key identifier. Viene visualizzato solo quando l’opzione -issuer_checks è settata.
    32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
    il candidato corrente per la distribuzione del certificato è stato rifiutato perché la sua keyUsageextension non permette la firma dei certificati.
    50 X509_V_ERR_APPLICATION_VERIFICATION
    un errore specifico dell’applicazione

    Bugs

    Benché i controlli sull’emittente sono notevolmente migliorati dalla vecchia tecnica, soffrono ancora di limitazioni nel fondamentale X509_LOOKUP API. Una conseguenza di ciò è che i certificati fidati che hanno una corrispondenza col subject name devono comparire in un file ( come specificato dalla opzione –CAfile) o in una directory (come specificato dalla opzione –CApath). Se occorrono in entrambe allora solo i certificati nel file verranno considerati.
    Versioni precedenti di openssl assumono che i certificati il cui subject name combaciano sono identici e li gestiscono male.

    Vedi anche

    x509(1)