web-dev-qa-db-fra.com

npm serveur http avec SSL

J'utilise le paquet npm "http-server" ( https://www.npmjs.com/package/http-server ) pour configurer un serveur Web simple, mais je ne parviens pas à le faire utiliser. SSL. Ma commande dans package.json est

http-server -p 8000 -o -S

avec un cert.pem et key.pem dans mon répertoire racine (pour le moment). L'option "-o" ouvre un navigateur vers la page par défaut, mais la page est servie via HTTP et n'est même pas accessible via HTTPS. Je ne reçois aucune erreur ou avertissement. J'ai également essayé d'ajouter les options "-C" et "-K" sans succès. Est-ce que quelqu'un a eu du succès avec ce paquet?

45
delucasvb

Juste pour référence future, mon problème a été résolu en mettant à jour le paquet avec la dernière version dans package.json. J'ai copié-collé un ancien fichier d'exemple sans mettre à jour les numéros de version.

2
delucasvb

Tout d’abord, assurez-vous que vous avez key.pem et cert.pem des dossiers. Vous pouvez les générer en utilisant cette commande:

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

Quelques questions vous seront posées après la saisie de la commande. Utilisation 127.0.0.1 comme valeur de "Nom commun" si vous voulez pouvoir installer le certificat dans le magasin de certificats racine de votre système d'exploitation ou dans le navigateur afin qu'il soit approuvé.

Cela génère une paire de clés cert et elle sera valide pendant environ 10 ans (3650 jours pour être exact).

Ensuite, vous devez exécuter le serveur avec -S pour activer SSL et -C pour votre fichier de certificat:

$ http-server -S -C cert.pem -o
Starting up http-server, serving ./ through https
Available on:
  https:127.0.0.1:8080
  https:192.168.1.101:8080
  https:192.168.1.104:8080
Hit CTRL-C to stop the server
121
slomek

Firefox n'acceptant pas les certificats auto-signés, un effort supplémentaire était requis. Commencez par créer une autorité de certification:

openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes -keyout ca-key.pem -x509 -out ca.pem -days 3650 -subj "/CN=A localhost CA"

Ajoutez ca.pem (une autorité de certification d'hôte local) aux certificats sécurisés de votre système d'exploitation et/ou de Firefox (d'autres navigateurs utilisent des autorités de certification système). Conservez les fichiers ca * dans un emplacement sécurisé pour une utilisation ultérieure, afin que vous n'ayez plus jamais à le faire.

Ensuite, pour tout site que vous exécutez et chaque fois que vous souhaitez modifier les paramètres, créez cert.pem et key.pem avec:

openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes -keyout key.pem -subj /CN=localhost | openssl x509 -req -CAkey ca-key.pem -CA ca.pem -CAcreateserial -out cert.pem -days 365 -extfile <(echo subjectAltName=DNS:localhost)

Les mêmes commandes sur plusieurs lignes pour plus de lisibilité:

# Create CA
openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes \
  -keyout ca-key.pem -x509 -out ca.pem -days 3650 -subj "/CN=A localhost CA"

# Create a CSR for localhost, then sign it by CA
openssl req -batch -new -newkey ec:<(openssl ecparam -name prime256v1) -nodes \
  -keyout key.pem -subj /CN=localhost | \
  openssl x509 -req -CAkey ca-key.pem -CA ca.pem -CAcreateserial -out cert.pem \
  -days 365 -extfile <(echo subjectAltName=DNS:localhost)
0