Comment créer des fichiers .pem pour le serveur Web https

90

J'utilise le framework Express dans Node.js pour créer un serveur Web. Je veux que le transport soit basé sur SSL.

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 le key.pem et le cert.pem requis par express?

Jeffrey
la source

Réponses:

200

Les deux fichiers dont vous avez besoin sont un certificat SSL codé PEM et une clé privée. Les certificats et clés codés PEM sont du texte codé en Base64 avec des délimiteurs de début / fin qui ressemblent -----BEGIN RSA PRIVATE KEY-----ou ressemblent.

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). Vous pouvez le faire de différentes manières, mais voici comment procéder dans OpenSSL.

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

Cela vous amènera à entrer une invite interactive pour générer une clé privée RSA de 2 048 bits et un CSR contenant toutes les informations que vous choisissez de saisir aux invites. ( Remarque: le nom commun est l'endroit où vous voudrez mettre le nom de domaine que vous utiliserez pour accéder à votre site. ) Une fois que vous avez fait cela, vous soumettez normalement ce CSR à une autorité de certification de confiance et une fois qu'ils ont validé votre demande, vous recevrez un certificat.

Si vous ne vous souciez pas de la confiance de votre certificat (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 passerons deux paramètres supplémentaires.

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

Cela vous donnera un certificat (valable 10 ans) et une paire de clés que vous pouvez utiliser dans l'extrait de code que vous avez publié.

Paul Kehrer
la source
2
qu'en est-il du certificat client et de la clé?
nkint
1
Ce message est terminé, exécutez les deux commandes qu'il a collées pour gagner les clés + cert. Le client n'établit pas de confiance, seulement le serveur.
Ninjaxor
@paul Pouvez-vous me dire où ces clés .pem et ces certificats sont-ils générés? Je veux dire quel répertoire? J'utilise Ubuntu 14
StormTrooper
2
Ils écriront dans le répertoire de travail actuel de votre shell.
Paul Kehrer
1
Notez que le certificat auto-signé généré de cette manière est la version 1, contenant CN, mais pas de SAN. "Depuis la version 58, Chrome exige que les certificats SSL utilisent SAN (Subject Alternative Name) au lieu du populaire Common Name (CN), donc la prise en charge du CN a été supprimée." [Correction de Chrome 58+ [missing_subjectAltName] avec openssl lors de l'utilisation de certificats auto-signés] ( alexanderzeitler.com/articles/… )
Zhiyong
12

Suivez simplement 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. saisissez ce ca.cnffichier pour l'utiliser comme raccourci de configuration:

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


  1. créez une nouvelle autorité de certification à l'aide de 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 ca-key.pemet ca-cert.pem, générons une clé privée pour le serveur:

    openssl genrsa -out key.pem 4096


  1. saisissez ce server.cnffichier pour l'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 à l'aide de 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 ici , ainsi que plus d'informations sur la façon d'utiliser ces certificats.

John Slegers
la source