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

¿Cómo crear mi propia cadena de certificados?

Me gustaría configurar mi propio OCSP Responder (sólo para fines de prueba). Esto requiere que tenga un certificado raíz y unos cuantos certificados generados a partir de él.

He conseguido crear un certificado autofirmado usando openssl. Quiero utilizarlo como certificado raíz. El siguiente paso sería crear los certificados derivados. Sin embargo, no puedo encontrar la documentación sobre cómo hacer esto. ¿Alguien sabe dónde puedo encontrar esta información?

Editar En retrospectiva, mi pregunta aún no está completamente contestada. Para aclarar el problema representaré mi cadena de certificados así

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

Actualmente puedo crear los certificados ROOT y A, pero no he encontrado cómo hacer una cadena más larga.

Mi comando para crear el certificado raíz es:

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

El certificado A se crea así:

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

Este comando depende implícitamente del certificado raíz, para el que encuentra la información necesaria en el fichero de configuración openssl.

El certificado B, sin embargo, sólo debe depender del A, que no está registrado en el archivo de configuración, por lo que el comando anterior no funcionará aquí.

¿Qué línea de comandos debo utilizar para crear los certificados B y posteriores?

Edición He encontrado la respuesta en este artículo . El certificado B (cadena A -> B) se puede crear con estos dos comandos:

# 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

También he cambiado el archivo openssl.cnf:

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

Este enfoque parece funcionar bien.

Respuestas (4)

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

Puede utilizar OpenSSL directamente.

  1. Cree una clave privada de la Autoridad de Certificación (esta es su clave más importante):

  2. Cree su certificado autofirmado por la CA:

  3. Emitir un certificado de cliente generando primero la clave, luego solicitar (o usar una proporcionada por un sistema externo) y luego firmar el certificado usando la clave privada de su CA:

(Puede que tenga que añadir algunas opciones ya que estoy usando estos comandos junto con mi archivo openssl.conf. Es posible que tenga que configurar su propio archivo .conf primero).

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

Una vez que haya creado su CA podrá utilizarla para firmar así :

  • Crear una clave :

  • Crear una csr :

  • Firmarla :

Su cambio :

basicConstraints=CA:TRUE # prev value was FALSE

significa que los certificados que emita podrán ser utilizados para firmar otros certificados.

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

OpenSSL incluye un script de Perl “CA.pl” que le ayuda a crear un certificado raíz CA autofirmado, junto con la clave privada correspondiente, además de unos cuantos archivos y directorios sencillos que le ayudan a realizar un seguimiento de los futuros certificados que firme (es decir, que emita) con esa CA raíz. También le ayuda a generar otros pares de claves y solicitudes de firma de certificados (CSR) y le ayuda a procesar esas CSR (es decir, emitir certificados para ellas), y más.

Tenga en cuenta que muchos productos requieren que los certificados de CA contengan un determinado atributo que los marque como certificados de CA, o no serán aceptados como firmantes/emisores válidos de otros certificados. Si el certificado autofirmado que ha creado no contiene ese atributo, puede tener problemas para que otro software lo trate como un certificado CA raíz válido.

Si no recuerdo mal, la sintaxis es algo así

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

He encontrado este post: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

Es para Node.JS pero el script en este repo de GitHub usa comandos de openSLL para crear un root CA cert y Domain cert.

Se ejecuta con: bash make-root-ca-and-certificates.sh 'example.com'

O para 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