Utilisez OpenSSL pour créer un certificat pour vous-même afin d'implémenter votre propre serveur HTTPS

Pour un site Web public, si vous souhaitez crypter la communication lors de la visite de l'utilisateur sur le site Web et permettre aux utilisateurs d'y accéder en utilisant HTTPS, le site Web lui-même doit avoir sa propre clé privée et un certificat émis par une organisation de confiance. Il s'agit d'une architecture technique qui utilise l'accès HTTPS.

Un certificat émis par une organisation de confiance nécessite de l'argent. Dans certains cas, nous pouvons émettre des certificats pour nous-mêmes. Par exemple, les développeurs développent leurs propres tests; par exemple, pour une utilisation interne à l'entreprise au lieu d'un accès Internet public.

Dans le  billet de blog que j'ai développé en  Delphi sur la base d'un serveur WebBroker ou WebService basé sur Indy et prenant en charge https , j'ai parlé de l'utilisation de ma propre clé privée et de mon certificat pour le programme Web Server et WebServices de Delphi Indy.

Parlons brièvement des méthodes spécifiques d'utilisation d'OpenSSL pour créer des clés privées et des certificats.

Référence de cet article: OpenSSL Certificate Authority

--------------------------------------

concept:

1. Utilisez le navigateur pour utiliser https://website.com/ pour visiter un site Web. Par rapport à la pure http://website.com/, la communication http n'est pas chiffrée. Utilisez l'outil de capture de paquets Sniffer ou autre Le contenu de la communication est intercepté par la méthode et peut être lu directement. Au niveau de la couche de communication, https est une communication cryptée basée sur SSL. Le contenu de communication intercepté ne peut pas être décrypté et lu par l'intercepteur.

2. La communication cryptée SSL est basée sur une technologie de cryptage asymétrique. Spécifiquement pour un site Web qui prend en charge l'accès HTTPS, son site Web doit avoir sa propre clé privée pour le cryptage asymétrique et un certificat contenant la clé publique pour le cryptage asymétrique.

2.1. Le certificat est émis par une organisation de confiance (telle que Google ou Microsoft ou une organisation spécialisée dans l'émission de certificats). Par conséquent, le client peut être sûr que la clé publique du certificat est bien le site Web, plutôt que d'être falsifiée par un attaquant.

2.2 Comment le client détermine-t-il que le certificat est digne de confiance? Parce que les informations contenues dans le certificat peuvent être retracées jusqu'au certificat racine de l'organisation qui a émis le certificat. Le certificat racine est ajouté au système d'exploitation Windows en tant que certificat approuvé. Bien entendu, les utilisateurs peuvent également supprimer manuellement la confiance de ce certificat racine.

3. En supposant qu'une personne qui a besoin de visiter un site Web doit fournir un certificat signé pour prouver son identité (ce type de site Web n'est généralement pas destiné au grand public), un utilisateur ordinaire peut également avoir sa propre clé privée et son certificat.

5. Chaîne de confiance des certificats: en tant qu'organisation de confiance spécialisée dans l'émission de certificats, son propre certificat racine et sa clé privée ne sont généralement pas utilisés pour émettre des certificats pour les utilisateurs. La sécurité de cette clé privée racine est très importante et elle n'est généralement pas utilisée. Par conséquent, la clé privée racine et le certificat racine sont utilisés pour créer et émettre certains certificats intermédiaires. Ensuite, le certificat intermédiaire et la clé privée sont utilisés pour émettre le certificat requis par l'utilisateur. Ce rôle similaire à celui de [l'intermédiaire] peut avoir plusieurs niveaux. Cela constitue une chaîne de confiance. Autrement dit, un certificat final, qui peut être retracé jusqu'au certificat racine. Par conséquent, pour vérifier si un certificat est légal, il ne nécessite pas de connexion Internet pour le vérifier. Tant qu'il existe un certificat racine de confiance dans le système de l'utilisateur, la validité du certificat peut être vérifiée.

5.1 Cependant, si un certificat est révoqué (par exemple, sa clé privée est volée), vous devez le vérifier en ligne. L'autorité de délivrance du certificat dispose d'un serveur dédié à la fourniture de telles requêtes. Bien sûr, il s'agit d'un protocole standard et le système informatique terminera automatiquement ce processus.

6. Les utilisateurs peuvent créer leur propre clé privée et une CSR (demande de signature de certificat) pour la signature de certificat. De cette manière, l'utilisateur conserve sa clé privée et n'a qu'à envoyer le CSR à l'autorité émettrice du certificat. L'autorité émettrice du certificat signera ce CSR en un vrai certificat. De cette manière, la clé privée de l'utilisateur ne sera vue par aucun tiers.

nom:

1. OpenSSL: OpenSSL est une bibliothèque de chiffrement gratuite et open source qui fournit un certain nombre d'outils de ligne de commande pour le traitement des certificats numériques. Certains de ces outils peuvent être utilisés pour agir en tant qu'autorité de certification.

2. CA: autorité de certification, est une entité qui signe des certificats numériques.

3. La clé privée est appelée Key et la clé racine est le nom de fichier correspondant: ca.key.pem, la clé publique est le certificat et le nom de fichier correspondant (certificat racine) ca.cert.pem; Le cert ici signifie certificat.

4. CSR: demande de signature de certificat. Le tiers crée la clé privée, puis envoie la demande de signature de certificat à l'autorité de certification.

 

 

Entraine toi:

Configuration de l'environnement:

J'utilise OpenSSL dans le sous-système Linux de Windows 10. Ubuntu est installé sur le sous-système Linux de mon Windows 10. Une fois l'installation terminée, OpenSSL y est déjà. Sinon, il existe de nombreux articles sur la façon d'installer OpenSSL sous Linux. Ou installez la version Win d'OpenSSL directement dans Windows. Je suppose que l'opération de ligne de commande devrait être la même.

En bref, démarrez Windows PowerShell et entrez la commande bash à l'intérieur pour entrer dans Linux. Vous pouvez donc y exécuter OpenSSL directement.

en fonctionnement:

1. Créez une clé privée racine et une paire de certificats

1. Préparez le répertoire de travail. J'ai créé un répertoire appelé ca sous l'utilisateur actuel. Sous Windows, il se trouve en fait dans le répertoire de l'utilisateur Windows actuel.

2. Créez 3 dossiers sous le répertoire ca:

mkdir certs crl newcerts privé

 

3. Créez deux fichiers dans le répertoire ca et entrez la commande: ( Remarque: le chemin actuel de toutes les commandes ci-dessous est le répertoire ca )

3.1. touchez index.txt

3.2. echo 1000> série

4. Modifiez les autorisations du répertoire privé: chmod 700 private

5. Créez une clé racine: entrez la commande: openssl genrsa -aes256 -out private / ca.key.pem 4096 pour créer une clé racine. Après avoir copié la commande ci-dessus, cliquez avec le bouton droit de la souris dans la fenêtre PowerShell pour la coller. Après avoir appuyé sur Entrée, vous serez invité à entrer le mot de passe. Entrez un mot de passe personnalisé pour créer une clé racine.

5.1 La clé racine est la clé privée de la racine, son fichier est: ca.key.pem, dans le répertoire privé;

5.2. chmod 400 privé / ca.key.pem

5.3 Ce fichier ca.key.pem est crypté et vous devez saisir un mot de passe à chaque fois que vous l'utilisez. Ce mot de passe est le mot de passe que le système vous invite à saisir lors de sa création.

6. Créez un certificat racine: openssl.cnf est requis pour créer un certificat racine, qui est un fichier de configuration texte.

6.1 Dans le lien de référence en haut de cet article, il y a le modèle openssl.cnf. Téléchargez-le et utilisez-le avec des modifications mineures ou sans changement.

6.2 Placez openssl.cnf dans le répertoire ca. Entrez la commande suivante:

openssl req -config openssl.cnf \

-key private/ca.key.pem \

-new -x509 -days 7300 -sha256 -extensions v3_ca \

-out certs/ca.cert.pem

 6.3. Pendant le processus de création du certificat, j'ai rencontré un message d'erreur: impossible de charger la clé privée . La raison en est que le système m'invite à saisir le mot de passe ca.key.pem lors de l'exécution de la commande, ce qui est dû à mon erreur de saisie.

6.4 Vérifiez le certificat que vous venez de créer: openssl x509 -noout -text -in certs / ca.cert.pem Vous pouvez voir le contenu du certificat. À ce stade, la clé privée racine et le certificat racine sont créés.

2. Créez une paire de certificats intermédiaire

1. mkdir ca / ​​intermediaire crée ce répertoire pour stocker les certificats intermédiaires. Donc, sous le répertoire ca, nous avons un répertoire intermédiaire.

1.1. cd ca / ​​intermédiaire

1.2 mkdir certs crl csr newcerts private Créer 3 sous-répertoires pour le répertoire intermédiaire. Il semble que la structure est la même que celle du répertoire ca.

1.3. chmod 700 privé

1.4. Créer un fichier: touch index.txt

1.5. Créer un fichier: echo 1000> serial

1.6 echo 1000> crlnumber Ce fichier est utilisé pour stocker la liste de révocation des certificats.

2. Créez la clé privée de l'intermédiaire, les opérations suivantes se trouvent dans le répertoire ca:

2.1. Exécutez la commande suivante pour créer la clé privée (vous serez invité à saisir le mot de passe lors de l'exécution de la commande):

openssl genrsa -aes256 \

-out intermediate/private/intermediate.key.pem 4096 

2.2 chmod 400 intermédiaire / privé / intermédiaire.key.pem Ce fichier intermediaire.key.pem est le fichier de clé privée de l'intermédiaire.

3. Faites le certificat de l'intermédiaire.

3.1 Préparez d'abord le fichier openssl.cnf dont le courtier a besoin. Copiez simplement les fichiers sous le ca précédent dans le répertoire intermédiaire.

3.2. Exécutez la commande suivante pour créer un certificat CSR:

openssl req -config intermediate/openssl.cnf -new -sha256 \

-key intermediate/private/intermediate.key.pem \

-out intermediate/csr/intermediate.csr.pem

Lors de l'exécution de la commande ci-dessus, vous serez invité à entrer le mot de passe de la clé privée de l'intermédiaire. 

Il convient de noter ici que lors de la création du certificat intermédiaire, dans le fichier de configuration .cnf, A. L'emplacement de 0.organizationName dans le fichier de configuration doit être le même nom que le certificat racine lorsque la commande vous demande de le saisir, à la fois en majuscules et en minuscules. Je ne peux pas me tromper. B. Le  commonName doit être différent du certificat racine. Lorsque vous êtes invité à entrer des noms après l'exécution de la commande, le commonName doit être un nom différent de celui du certificat racine.

3.3. Signez le certificat intermédiaire avec le certificat racine:

openssl ca -config openssl.cnf -extensions v3_intermediate_ca \
      -days 3650 -notext -md sha256 \
      -in intermediate/csr/intermediate.csr.pem \
      -out intermediate/certs/intermediate.cert.pem

 

3.4. chmod 444 intermédiaire / certs / intermediaire.cert.pem

3.5. Vérifiez ce certificat intermédiaire:

openssl x509 -noout -text \
      -in intermediate/certs/intermediate.cert.pem

3.5 Lorsqu'une application (comme un navigateur Web) tente de vérifier un certificat signé par une autorité de certification intermédiaire, elle doit également vérifier le certificat intermédiaire par rapport au certificat racine. Pour terminer la chaîne d'approbation, créez une chaîne de certificats CA à présenter à l'application.

Pour créer une chaîne de certificats CA, connectez le certificat intermédiaire et le certificat racine ensemble. Nous utiliserons ce fichier ultérieurement pour vérifier le certificat signé par l'autorité de certification intermédiaire.

Exécutez les commandes suivantes:

cat intermediate/certs/intermediate.cert.pem \
      certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
	  chmod 444 intermediate/certs/ca-chain.cert.pem

3.6 Notre fichier de chaîne de certificats doit contenir le certificat racine, car aucune application cliente ne connaît encore le certificat. Une meilleure option (en particulier dans le cas de la gestion intranet) est d'installer un certificat racine sur chaque client qui doit se connecter. Dans ce cas, le fichier de chaîne doit uniquement contenir votre certificat intermédiaire.

 

3. Créez une paire de certificats pour le site Web

La paire de certificats utilisée par le site Web est émise avec un certificat intermédiaire. Le processus de production est exactement le même que les deux ci-dessus.

1. Créez une clé - la clé privée du site Web:

 

openssl genrsa -aes256 \
      -out intermediate/private/www.myhost.net.key.pem 2048

1.1 Notez que -aes256 dans la première ligne ici est le mot de passe de cryptage pour cette clé. Lorsque le site Web charge le certificat pour la première fois, la clé doit être chargée et le mot de passe doit être entré. Si vous ne souhaitez pas entrer le mot de passe lorsque le serveur Web charge cette clé, vous n'avez pas besoin de l'option -aes256.

1.2 Le contrôle TIdServerIOHandlerSSLOpenSSL fourni par Indy of Delphi pour l'utilisation du certificat OpenSSL a un événement OnGetPassword, où le programme peut entrer le mot de passe de la clé ci-dessus pour que le programme utilise cette clé. 

1.3. chmod 400 intermédiaire / privé / mis.myhost.net.key.pem

 

2. Créez un certificat pour le site Web:

2.1. Exécutez la commande suivante pour créer le CSR du site Web:

cd /root/ca
# openssl req -config intermediate/openssl.cnf \
      -key intermediate/private/mis.myhost.net.key.pem \
      -new -sha256 -out intermediate/csr/www.myhost.net.csr.pem

 2.2. Lors de l'exécution de la commande ci-dessus, vous serez invité à saisir un ensemble d'informations, telles que le nom, l'adresse e-mail, etc. Il faut noter ici que lorsque le commonName est entré, l'adresse du site Web doit être saisie, et elle ne doit pas être la même que le commonName saisi lors de la création du certificat intermédiaire. Le même ne peut pas être créé avec succès.

2.3. Utilisez la signature de certificat intermédiaire pour le certificat CSR du site Web pour produire le certificat final à utiliser:

openssl ca -config intermediate/openssl.cnf \
      -extensions server_cert -days 375 -notext -md sha256 \
      -in intermediate/csr/mis.myhost.net.csr.pem \
      -out intermediate/certs/mis.myhost.net.cert.pem

 2.4. chmod 444 intermédiaire / certs / mis.myhost.net.cert.pem

2.5. Vérification:

openssl x509 -noout -text \
      -in intermediate/certs/mis.myhost.net.cert.pem

À ce stade, un certificat utilisable est complété.

Ce certificat peut être utilisé pour un accès chiffré au site Web.Dans mon article de blog, j'ai également expliqué comment faire en sorte que les programmes Delphi l'utilisent. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/pcplayer/article/details/108498115
conseillé
Classement