Jamie Nguyen a un excellent guide sur la création d'une autorité de certification et la délivrance de certificats et CRLs, qui se trouve ici: https://jamielinux.com/docs/openssl-certificate-authority/
Voilà ce que je vais faire référence vaguement à en répondant à votre question. Si à un moment donné vous êtes curieux de savoir à quoi ressemblerait la sortie de ces commandes, je vous renvoie à son site. Ils sont omis ici pour garder ce poste déjà long gérable.
Fondamentalement, nous devons faire ce qui suit:
- Créer un certificat auto-signé pour agir comme autorité de certification
- Utilisez le certificat CA pour signer deux certificats de feuille
- Révoquer l'un des les certificats de feuille
- une liste de révocation Publish
Création autosignée ed CA Certificate
Nous allons d'abord devoir préparer la configuration CA. Si vous ne voulez pas passer par son tutoriel, vous pouvez simplement utiliser ce qui suit, config un peu abrégé:
# OpenSSL root CA configuration file.
[ ca ]
default_ca = ca_default
[ ca_default ]
dir = /etc/pki/CA
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/db/root-ca.index
serial = $dir/db/root-ca.serial
RANDFILE = $dir/private/.rand
private_key = $dir/private/root-ca.key
certificate = $dir/certs/root-ca.crt
crlnumber = $dir/db/root-ca.crlnumber
crl = $dir/crl/root-ca.crl
crl_extensions = crl_ext
default_crl_days = 180
default_md = sha384
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_loose
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 3072
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha384
x509_extensions = int_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
countryName_default = US
stateOrProvinceName_default = MD
localityName_default =
0.organizationName_default = LAB
organizationalUnitName_default =
emailAddress_default =
[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ server_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ crl_ext ]
authorityKeyIdentifier=keyid:always
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
Cela devrait être placé dans le répertoire de travail comme openssl.cnf
.
Vous devez modifier la ligne dir = /etc/pki/CA
pour pointer vers le répertoire que vous allez travailler sur, et peut-être modifier les URL CDP pour pointer vers un domaine réel si vous souhaitez activer la vérification de révocation par CDP.
Ensuite, nous allons devoir créer des fichiers et des répertoires attendus par l'autorité de certification, puis générer une clé privée RSA pour le certificat d'autorité de certification. Remarque: La clé privée de l'autorité de certification sera protégée par une phrase secrète.
mkdir db private certs crl newcerts csr & touch db/root-ca.index
echo 1000 > db/root-ca.serial & echo 1000 > db/root-ca.crlnumber
openssl genrsa -aes256 -out private/root-ca.key 4096
Nous devons maintenant générer un certificat d'autorité de certification à l'aide de la nouvelle clé privée.La phrase secrète que vous avez saisie lors de la création de la clé privée vous sera demandée, puis vous demandera des informations telles que Pays, État et Nom commun. Le champ de nom commun est ce qui compte ici, et pour ce test, je voudrais juste mettre Test Root CA
.
openssl req -config openssl.cnf -key private/root-ca.key \
-new -x509 -days 3650 -sha256 -extensions root_ca \
-out certs/root-ca.crt
Une fois la commande terminée, vous devriez voir un nouveau certificat à certs/root-ca.crt
, que vous pouvez voir avec la commande suivante:
openssl x509 -in certs/root-ca.crt -noout -text
Création de feuilles Certificats
Pour créer des feuilles certificats (également appelés certificats d'entité finale), vous devrez générer une autre clé privée pour chacun d'entre eux. Nous les appellerons test1
et test2
.
openssl genrsa -aes256 -out private/test1.key 4096
openssl genrsa -aes256 -out private/test2.key 4096
Pour chacun d'eux, vous allez générer une demande de signature de certificat (CSR) que le CA utilisera pour générer le certificat réel. Des questions similaires vous seront posées lors de la création du certificat de l'autorité de certification. Vous pouvez simplement utiliser Test 1
et Test 2
comme noms communs.
openssl req -config openssl.cnf -key private/test1.key
-new -sha256 -out csr/test1.req
openssl req -config openssl.cnf -key private/test2.key
-new -sha256 -out csr/test2.req
Vous devriez maintenant avoir deux demandes de certificats dans le répertoire csr
. Nous allons les utiliser pour générer les certificats. Vous devrez entrer la phrase secrète de la clé privée de l'AC pour signer ces demandes.
openssl ca -config -in csr/test1.req -out certs/test1.crt \
-extensions server_cert -days 365 -notext -md sha256
openssl ca -config -in csr/test2.req -out certs/test2.crt \
-extensions server_cert -days 365 -notext -md sha256
Maintenant, vous devriez avoir deux nouveaux certificats de feuilles brillantes dans le répertoire certs
. Ils peuvent être visualisés avec les commandes ci-dessous.
openssl x509 -in certs/test1.crt -noout -text
openssl x509 -in certs/test2.crt -noout -text
Révoquer un certificat
Maintenant vient la partie amusante. Le processus de révocation d'un certificat est similaire à la signature. Nous allons utiliser le certificat CA et la clé privée pour révoquer la feuille de Test 2
. La commande suivante nécessitera la phrase secrète de la clé privée de l'autorité de certification.
openssl ca -config opnessl.cnf -revoke certs/test2.crt
Si vous êtes curieux, le fichier db/root-ca.index
, qui jusqu'à ce point a été l'enregistrement des numéros de série et horodatages des certificats que nous émettons, devrait afficher une deuxième horodatage de révocation à côté de Test 2
. C'est un fichier texte normal.
La publication de la liste de révocation
maintenant pour générer une liste de révocation, nous faisons simplement ce qui suit (nécessite une clé privée CA passphrase):
openssl ca -config openssl.cnf -gencrl -out crl/root-ca.crl
Affichage de la liste de révocation est simple. En utilisant la commande ci-dessous, vous devriez voir une entrée pour le numéro de série de Test 2
et l'horodatage de sa révocation.
openssl crl -in crl/root-ca.crl -noout -text
Pour vérifier le certificat a été révoqué, la commande suivante est utilisée:
cat certs/root-ca.crt crl/root-ca.crl > crl/crl-chain.pem
openssl verify -crl_check -CAfile crl/crl-chain.pem certs/test2.crt
L'utilisation de ce pour Test 2
doit retourner un statut de certificat de révocation. Exécuter le même commandant pour Test 1
devrait retourner OK.
Récapitulation
En supposant que tout a fonctionné correctement, le résultat final devrait être:
- Un certificat CA dans
certs/root-ca.crt
- Un bon certificats de feuilles dans
certs/test1.crt
- Un certificat feuille révoqué dans
certs/test2.crt
- Un CRL i n
crl/root-ca.crl
Remarque 1: Tout ceci suppose que vous utiliserez OpenSSL sur une machine Linux. Si vous avez besoin d'instructions pour Windows et certutil
, ils peuvent être fournis.
Note 2: J'ai omis beaucoup de ce guide qui n'était pas directement lié à votre question. Si vous voulez plus de détails sur ce processus, je vous renvoie à nouveau au lien affiché en haut.
Stack Overflow est un site de questions de programmation et de développement. Cette question semble être hors sujet car il ne s'agit pas de programmation ou de développement. Voir [Quels sujets puis-je poser à ce sujet?] (Http://stackoverflow.com/help/on-topic) dans le centre d'aide. Peut-être [Super User] (http://superuser.com/) ou [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) serait un meilleur endroit à demander. Voir aussi [Où poser des questions sur Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww
Voir également [Comment signer une demande de signature de certificat avec votre autorité de certification] (http: // stackoverflow .com/a/21340898/608639) et [Comment créer un certificat auto-signé avec openssl?] (http://stackoverflow.com/q/10175812/608639) – jww