web-dev-qa-db-fra.com

OpenSSL en tant qu'autorité de certification sans toucher à l'environnement certs / crl / index / etc

Je pense que j'ai la bonne commande OpenSSL pour signer un certificat mais je suis coincé et les tutoriels que j'ai trouvés utilisent un format d'argument différent (j'utilise OpenSSL 0.9.8o 01 juin 2010).

openssl ca -cert cert.pem -keyfile key.pem

(La clé privée n'est pas chiffrée et la CSR est sur stdin.)

Il donne cette erreur

Using configuration from /usr/lib/ssl/openssl.cnf
./demoCA/index.txt: No such file or directory
unable to open './demoCA/index.txt'

En regardant ce fichier de configuration:

[ 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.

Je n'ai rien de tout cela en place. Je ne veux rien configurer de tout ça.

Est-ce strictement nécessaire ou existe-t-il une option "ne vous embêtez pas"?

J'ai essayé de créer des répertoires et des fichiers vides, mais j'ai un enchevêtrement. Ce que je veux vraiment, c'est qu'une commande comme la précédente fonctionne, avec la sortie sur stdout, sans rien toucher sur le système de fichiers.

31
spraff

Je ne connais pas d'options "ne vous embêtez pas", mais voici comment vous pouvez configurer une CA de démonstration rapide:

#!/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

Vous pouvez maintenant générer et signer des clés:

# 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
32
user786653

Plutôt que d'utiliser l'option ca, essayez l'option x509 avec -req. Vous ajouteriez -CAfile pour indiquer votre autorité. Cela signera votre certificat sans ajouter d'entrées à l'index. Il y a plus sur l'utilisation de x509 comme "mini CA" ici.

http://www.openssl.org/docs/apps/x509.html#SIGNING_OPTIONS

12
snow6oy

Basé sur réponse de snow6oy , voici ce que j'ai fait:

openssl x509 -req -CA CACert.pem -CAkey CAKey.pem -CAcreateserial -in YourCSR.csr -out YourCert.pem

Quelques indicateurs facultatifs qui peuvent être utiles:

  • -days 1095
    (La valeur par défaut est de 30 jours)

  • -sha256
    (RHEL 7 par défaut SHA-1)

9
bmaupin

Et des options comme -sha256 -journées 1095 ne sont pas nécessaires.

openssl x509 -req -in YOUR_CSR.csr -CA YOUR_CA.pem -CAkey YOUR_CA_KEY.pem -CAcreateserial -out YOUR_WANTED.crt
3
hukeping