2010-03-31 15:38:27 +0000 2010-03-31 15:38:27 +0000
63
63

Come creare la mia catena di certificati?

Vorrei configurare il mio OCSP Responder (solo a scopo di test). Questo richiede che io abbia un certificato di root e alcuni certificati generati da esso.

Sono riuscito a creare un certificato autofirmato usando openssl. Voglio usarlo come certificato di root. Il prossimo passo sarebbe quello di creare i certificati derivati. Non riesco però a trovare la documentazione su come farlo. Qualcuno sa dove posso trovare queste informazioni?

Modifica A posteriori, la mia domanda non ha ancora una risposta completa. Per chiarire il problema rappresenterò la mia catena di certificati in questo modo:

ROOT -\> A -> B -> C -> …

Attualmente sono in grado di creare i certificati ROOT e A, ma non ho trovato come fare una catena più lunga.

Il mio comando per creare il certificato di root è:

openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem

Il certificato A viene creato così:

openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.cer

Questo comando dipende implicitamente dal certificato di root, per il quale trova le informazioni necessarie nel file di configurazione openssl.

Il certificato B però deve fare affidamento solo su A, che non è registrato nel file di configurazione, quindi il comando precedente non funzionerà qui.

Quale linea di comando dovrei usare per creare i certificati B e oltre?

Edit Ho trovato la risposta in questo articolo . Il certificato B (catena A -> B) può essere creato con questi due comandi:

# Create a certificate request
openssl req -new -keyout B.key -out B.request -days 365

# Create and sign the certificate
openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request

Ho anche cambiato il file openssl.cnf:

[usr_cert]
basicConstraints=CA:TRUE # prev value was FALSE

Questo approccio sembra funzionare bene.

Risposte (4)

28
28
28
2010-03-31 18:03:18 +0000

Puoi usare direttamente OpenSSL.

  1. Create una chiave privata dell'Autorità di Certificazione (questa è la vostra chiave più importante):

  2. Crea il tuo certificato autofirmato CA:

  3. Rilasciare un certificato client generando prima la chiave, poi richiedere (o usarne una fornita da un sistema esterno) e poi firmare il certificato usando la chiave privata della vostra CA:

(potrebbe essere necessario aggiungere alcune opzioni poiché sto usando questi comandi insieme al mio file openssl.conf. Potrebbe essere necessario impostare prima il proprio file .conf).

14
14
14
2012-04-29 17:54:40 +0000

Una volta creata la vostra CA potreste usarla per firmare così :

  • Creare una chiave :

  • Creare un csr :

  • Firmarlo :

La vostra modifica :

basicConstraints=CA:TRUE # prev value was FALSE

significa che i certificati che rilasciate possono essere usati per firmare altri certificati.

9
9
9
2010-03-31 17:51:10 +0000

OpenSSL viene fornito con uno script Perl “CA.pl” per aiutarvi a creare un certificato CA di root autofirmato, insieme alla chiave privata corrispondente, più alcuni semplici file e directory per aiutarvi a tenere traccia di qualsiasi certificato futuro che firmerete (o emetterete) con quella CA di root. Ti aiuta anche a generare altre coppie di chiavi e richieste di firma di certificati (CSR) e ti aiuta a processare quelle CSR (cioè a rilasciare certificati per loro), e altro ancora.

Notate che molti prodotti richiedono che i certificati CA contengano un certo attributo che li marchi come certificati CA, altrimenti non saranno accettati come firmatari/emittenti validi di altri certificati. Se il certificato autofirmato che avete creato non contiene quell'attributo, potreste avere problemi a farlo trattare da altri software come un certificato CA valido.

Se ricordo bene, la sintassi è qualcosa del genere:

CA.pl -newca # Create a new root CA  

CA.pl -newreq # Create a new CSR

CA.pl -sign # Sign a CSR, creating a cert  

CA.pl -pkcs12 # Turn an issued cert, plus its matching private key and trust chain, into a .p12 file you can install on another machine
-1
-1
-1
2018-11-06 22:59:55 +0000

Ho trovato questo post: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

È per Node.JS ma lo script in questo repo GitHub usa i comandi openSLL per creare una CA cert di root e una Domain cert.

Esegui usando: bash make-root-ca-and-certificates.sh 'example.com'

O per localhost usando: bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-and-certificates.sh

#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p certs/{server,client,ca,tmp}

# Create your very own Root Certificate Authority
openssl genrsa \
  -out certs/ca/my-root-ca.key.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key certs/ca/my-root-ca.key.pem \
  -days 1024 \
  -out certs/ca/my-root-ca.crt.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out certs/server/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key certs/server/privkey.pem \
  -out certs/tmp/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
# -CAserial certs/ca/my-root-ca.srl
openssl x509 \
  -req -in certs/tmp/csr.pem \
  -CA certs/ca/my-root-ca.crt.pem \
  -CAkey certs/ca/my-root-ca.key.pem \
  -CAcreateserial \
  -out certs/server/cert.pem \
  -days 500

# Create a public key, for funzies
# see https://gist.github.com/coolaj86/f6f36efce2821dfb046d
openssl rsa \
  -in certs/server/privkey.pem \
  -pubout -out certs/client/pubkey.pem

# Put things in their proper place
rsync -a certs/ca/my-root-ca.crt.pem certs/server/chain.pem
rsync -a certs/ca/my-root-ca.crt.pem certs/client/chain.pem
cat certs/server/cert.pem certs/server/chain.pem > certs/server/fullchain.pem