99 votes

Comment créer des fichiers .pem pour un serveur web https ?

J'utilise le framework Express dans Node.js pour créer un serveur web. Je veux utiliser ssl pour la connexion du serveur web.

Le code pour créer le serveur web https est le suivant.

var app = express.createServer({
  key: fs.readFileSync('./conf/key.pem'),
  cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;

Question : Comment créer les fichiers key.pem et cert.pem requis par express ?

211voto

Paul Kehrer Points 3332

Les deux fichiers dont vous avez besoin sont un certificat SSL codé PEM et une clé privée. Les certificats et les clés codés PEM sont des textes codés en Base64 avec des délimiteurs de début et de fin qui se présentent comme suit -----BEGIN RSA PRIVATE KEY----- ou similaire.

Pour créer un certificat SSL, vous devez d'abord générer une clé privée et une demande de signature de certificat, ou CSR (qui contient également votre clé publique), et ce de différentes manières, mais voici comment procéder avec OpenSSL.

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

Cela vous amènera à entrer dans une invite interactive pour générer une clé privée RSA de 2048 bits et un CSR qui contient toutes les informations que vous choisissez d'entrer aux invites. ( Remarque : le nom commun est l'endroit où vous voulez mettre le nom de domaine que vous utiliserez pour accéder à votre site. ) Une fois que vous avez fait cela, vous devez normalement soumettre ce CSR à une autorité de certification de confiance et une fois qu'elle a validé votre demande, vous recevez un certificat.

Si vous ne vous souciez pas de la fiabilité de votre certificat (ce qui est généralement le cas à des fins de développement), vous pouvez simplement créer un certificat auto-signé. Pour ce faire, nous pouvons utiliser presque la même ligne, mais nous allons passer deux paramètres supplémentaires.

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Vous obtiendrez ainsi un certificat (valable 10 ans) et une paire de clés que vous pourrez utiliser dans l'extrait de code que vous avez publié.

14voto

John Slegers Points 509

Il suffit de suivre cette procédure :

  1. Créez le dossier dans lequel vous souhaitez stocker votre clé et votre certificat :

    mkdir conf


  1. allez dans ce répertoire :

    cd conf


  1. attrape ça ca.cnf à utiliser comme raccourci de configuration :

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. créer une nouvelle autorité de certification en utilisant cette configuration :

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. maintenant que nous avons notre autorité de certification dans ca-key.pem y ca-cert.pem , générons une clé privée pour le serveur :

    openssl genrsa -out key.pem 4096


  1. attrape ça server.cnf à utiliser comme raccourci de configuration :

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. générer la demande de signature de certificat en utilisant cette configuration :

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. signer la demande :

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem

J'ai trouvé cette procédure aquí ainsi que de plus amples informations sur la manière d'utiliser ces certificats.

0voto

Julio Spinelli Points 118

Une alternative consiste à générer les certificats avec la bibliothèque pem en utilisant la méthode createCertificate de la classe.

Le processus serait le suivant :

Installez openssl dans votre système si ce n'est pas déjà fait, par exemple pour Windows 10 la version compilée des sources (semble être la plus ouverte) peut être trouvée ici : https://curl.se/Windows/ les explications sur la façon dont il est compilé et sauvegardé sont ici : https://wiki.openssl.org/index.php/Binaries . Pour la source https://www.openssl.org/community/binaries.html Pour Windows, vous pouvez ajouter le chemin du fichier openssl.bin à la variable de chemin de l'environnement système ( https://www.architectryan.com/2018/08/31/how-to-change-environment-variables-on-Windows-10/ ) ou passer l'emplacement du fichier à la bibliothèque PEM.

Installez pem en utilisant (documentation ici : https://github.com/Dexus/pem

npm i pem

à la ligne de commande à la racine du serveur.

D'après la documentation, vous pouvez voir qu'un simple serveur https avec les clés peut être créé simplement par :

const https = require('https')
const pem = require('pem')

pem.createCertificate({ days: 1, selfSigned: true }, (err, keys) => {
  if (err) {
    throw err
  }
  https.createServer({ key: keys.clientKey, cert: keys.certificate }, (req, res)  => {
    res.end('o hai!')
  }).listen(443)
})

ou en utilisant l'express npm i express à la ligne de commande à la racine du serveur) :

const https = require('https')
const pem = require('pem')
const express = require('express')

pem.createCertificate({ days: 1, selfSigned: true }, (err, keys) => {
  if (err) {
    throw err
  }
  const app = express()

  app.get('/', (req, res) => {
    res.send('o hai!')
  })

  https.createServer({ key: keys.clientKey, cert: keys.certificate }, app).listen(443)
})

Je viens de remplacer var par const, comme il se doit, et functions par arrow functions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X