crear - OpenSSL como CA sin tocar el entorno certs/crl/index/etc
openssl linux (4)
Basado en la respuesta de snow6oy , esto es lo que hice:
openssl x509 -req -CA CACert.pem -CAkey CAKey.pem -CAcreateserial -in YourCSR.csr -out YourCert.pem
Un par de banderas opcionales que pueden ser útiles:
-days 1095
(El valor predeterminado es 30 días)-sha256
(RHEL 7 por defecto es SHA-1)
Creo que tengo el comando OpenSSL correcto para firmar un certificado, pero me he quedado atascado y los tutoriales que he encontrado usan un formato de argumento diferente (estoy usando OpenSSL 0.9.8o 01 Jun 2010).
openssl ca -cert cert.pem -keyfile key.pem
(La clave privada no está encriptada y la CSR está en estándar).
Da este error
Using configuration from /usr/lib/ssl/openssl.cnf
./demoCA/index.txt: No such file or directory
unable to open ''./demoCA/index.txt''
Mirando ese archivo de configuración:
[ ca ]
default_ca = CA_default # The default ca section
[ CA_default ]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kepp
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
No tengo nada de esto configurado. No quiero configurar nada de esto.
¿Es estrictamente necesario o hay una opción de "no molestar"?
Intenté crear directorios y archivos vacíos pero estoy enredado. Lo que realmente quiero es que funcione un comando como el anterior, con salida en la salida estándar, sin tocar nada en el sistema de archivos.
En lugar de usar la opción ca, pruebe la opción x509 con -req. Usted agregaría -CAfile para señalar su autoridad. Esto firmará su certificado sin agregar entradas al índice. Hay más información sobre el uso de x509 como "mini CA" aquí.
No conozco ninguna opción de "no molestar", pero aquí es cómo puede configurar una demostración rápida CA:
#!/bin/bash
CAROOT=/path/to/ca
mkdir -p ${CAROOT}/ca.db.certs # Signed certificates storage
touch ${CAROOT}/ca.db.index # Index of signed certificates
echo 01 > ${CAROOT}/ca.db.serial # Next (sequential) serial number
# Configuration
cat>${CAROOT}/ca.conf<<''EOF''
[ ca ]
default_ca = ca_default
[ ca_default ]
dir = REPLACE_LATER
certs = $dir
new_certs_dir = $dir/ca.db.certs
database = $dir/ca.db.index
serial = $dir/ca.db.serial
RANDFILE = $dir/ca.db.rand
certificate = $dir/ca.crt
private_key = $dir/ca.key
default_days = 365
default_crl_days = 30
default_md = md5
preserve = no
policy = generic_policy
[ generic_policy ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
EOF
sed -i "s|REPLACE_LATER|${CAROOT}|" ${CAROOT}/ca.conf
cd ${CAROOT}
# Generate CA private key
openssl genrsa -out ca.key 1024
# Create Certificate Signing Request
openssl req -new -key ca.key /
-out ca.csr
# Create self-signed certificate
openssl x509 -req -days 10000 /
-in ca.csr /
-out ca.crt /
-signkey ca.key
Ahora puedes generar y firmar claves:
# Create private/public key pair
openssl genrsa -out server.key 1024
# Create Certificate Signing Request
openssl req -new -key server.key /
-out server.csr
# Sign key
openssl ca -config ${CAROOT}/ca.conf /
-in server.csr /
-cert ${CAROOT}/ca.crt /
-keyfile ${CAROOT}/ca.key /
-out server.crt
Y las opciones como -sha256
-days 1095
no son necesarias.
openssl x509 -req -in YOUR_CSR.csr -CA YOUR_CA.pem -CAkey YOUR_CA_KEY.pem -CAcreateserial -out YOUR_WANTED.crt