Essayer de suivre diverses instructions sur la création d’un certificat auto-signé pour une utilisation avec localhost. La plupart des instructions semblent concerner IIS, mais j’essaie d’utiliser Nodejs/Express. Aucun d'entre eux ne fonctionne correctement car, même si le certificat est installé, il n'est pas approuvé. voici ce que j'ai essayé qui échoue:
Quelqu'un peut-il offrir un flux de travail capable de le faire? Je peux obtenir un certificat installé, mais Je ne peux pas obtenir que le certificat soit approuvé en chrome (v32) ou IE (v10).
EDIT: il a été suggéré dans les commentaires que le problème n'est pas une racine de certificat de confiance. J'ai installé le CERT via IE mais on ne fait toujours pas confiance.
Chemin le plus court. Testé sur MacOS, mais peut fonctionner de la même manière sur d'autres systèmes d'exploitation.
Générer pem
> openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365
> openssl rsa -in keytmp.pem -out key.pem
Votre serveur express
const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000
app.get('/', (req, res) => {
res.send('WORKING!')
})
const httpsOptions = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
}
const server = https.createServer(httpsOptions, app).listen(port, () => {
console.log('server running at ' + port)
})
https://localhost:3000
dans Google Chrome et vous verrez que ce n'est pas sécurisé. Encore!Vous pouvez essayer openSSL pour générer des certificats . Regardez this .
Vous allez avoir besoin d'un fichier .key et d'un fichier .crt pour ajouter HTTPS au noeud JS Express Server. Une fois que vous avez généré cela, utilisez ce code pour ajouter HTTPS au serveur.
var https = require('https');
var fs = require('fs');
var express = require('express');
var options = {
key: fs.readFileSync('/etc/Apache2/ssl/server.key'),
cert: fs.readFileSync('/etc/Apache2/ssl/server.crt'),
requestCert: false,
rejectUnauthorized: false
};
var app = express();
var server = https.createServer(options, app).listen(3000, function(){
console.log("server started at port 3000");
});
Cela fonctionne correctement sur ma machine locale ainsi que sur le serveur sur lequel je l'ai déployé. Celui que j'ai dans le serveur a été acheté de goDaddy mais localhost avait un certificat auto-signé.
Cependant, chaque navigateur a émis une erreur indiquant que la connexion n’était pas fiable. Voulez-vous continuer? Après que je clique sur Continuer, cela a bien fonctionné.
Si quelqu'un a déjà contourné cette erreur avec un certificat auto-signé, veuillez éclairer.
Les réponses ci-dessus étaient partielles. J'ai passé tellement de temps à faire en sorte que cela fonctionne, c'est fou. Note à mon futur moi, voici ce que vous devez faire:
Je travaille sur Windows 10, avec Chrome 65. Firefox se comporte bien - confirmez simplement localhost en tant qu'exception de sécurité et cela fonctionnera. Chrome ne:
Étape 1. dans votre backend, créez un dossier appelé security
. nous allons travailler à l'intérieur.
Étape 2. crée un fichier de configuration de requête nommé req.cnf
avec le contenu suivant (le crédit va à: @Anshul )
req.cnf:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
Prompt = no
[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost
Une explication de ces champs est ici .
Étape 3. naviguez jusqu'au dossier de sécurité du terminal et tapez la commande suivante:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem -config req.cnf -sha256
Étape 4. puis en dehors du dossier security
, dans votre application express, procédez comme suit: (le crédit revient à @Diego Mello)
backend
/security
/server.js
server.js:
const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000
app.get('/', (req, res) => {
res.send("IT'S WORKING!")
})
const httpsOptions = {
key: fs.readFileSync('./security/cert.key'),
cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
.listen(port, () => {
console.log('server running at ' + port)
})
Étape 5. démarrez le serveur, node server.js
et accédez à https: // localhost: 3000 .
À ce stade, nous avons la configuration du serveur. Mais le navigateur devrait afficher un message d'avertissement.
Nous devons enregistrer notre certificat auto-signé, en tant qu'autorité de certification approuvée de CA, dans le magasin de certificats de chrome/windows. (chrome enregistre également ceci dans Windows,)
Étape 6. ouvrez Outils de développement chromés, ouvrez le panneau Sécurité, puis cliquez sur Afficher le certificat .
Étape 7. allez dans le panneau Détails, cliquez sur Copier le fichier, puis lorsque le certificat d'exportation Wizard apparaît, cliquez sur Suivant comme ci-dessous:
Étape 8. quittez le codage DER, cliquez sur suivant, choisissez Browse
, placez-le dans un dossier facile d'accès, tel que Bureau, et nommez le certificat localhost.cer, then click Save and then Finish.
. Vous devriez pouvoir voir votre certificat sur le bureau.
Étape 9. Ouvrez chrome://settings/
en l’insérant dans la case URL. En bas, cliquez sur Advanced / Advanced Options
, puis faites défiler pour trouver Manage Certificates
.
Étape 10. Accédez au panneau des autorités de certification racines de confiance, puis cliquez sur importer.
Nous allons importer le certificat localhost.cer
que nous venons juste d'exporter à l'étape 8.
Étape 11. cliquez sur parcourir, recherchez le localhost.cer
, laissez les valeurs par défaut, puis cliquez plusieurs fois sur le suivant - jusqu'à ce que cet avertissement apparaisse, cliquez sur Oui.
Étape 12. ferme tout et redémarre chrome. Ensuite, en allant à https://localhost:3000
, vous devriez voir:
Comment générer un certificat SSL pour localhost: link
openssl genrsa -des3 -out server.key 1024
vous devez entrer ici mot de passe que vous devez ressaisir dans les étapes suivantes
openssl req -new -key server.key -out server.csr
à la question "Nom commun", entrez: localhost
openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt
Voici ce qui fonctionne pour moi
sur les fenêtres
1) Ajoutez ceci à votre fichier% WINDIR%\System32\drivers\etc\hosts: 127.0.0.1 localdev.YOURSITE.net (le navigateur a des problèmes avec 'localhost' (pour les scripts croisés).
Windows Vista et Windows 7 Vista et Windows 7 utilisent le contrôle de compte d'utilisateur (UAC), de sorte que le Bloc-notes doit être exécuté en tant qu'administrateur.
Cliquez sur Démarrer -> Tous les programmes -> Accessoires
Cliquez avec le bouton droit de la souris et sélectionnez Exécuter en tant qu’administrateur.
Cliquez sur Continuer dans la fenêtre UAC "Windows requiert votre autorisation".
Lorsque le Bloc-notes s'ouvre, cliquez sur Fichier -> Ouvrir.
Dans le champ Nom du fichier, tapez C:\Windows\System32\Drivers\etc\hosts
Cliquez sur Ouvrir
Ajoutez ceci à votre fichier% WINDIR%\System32\drivers\etc\hosts: 127.0.0.1 localdev.YOURSITE.net
Sauvegarder
Fermer et redémarrer les navigateurs
Sur Mac ou Linux:
su
127.0.0.1 localdev.YOURSITE.net
Lorsque vous développez, utilisez localdev.YOURSITE.net au lieu de localhost, donc si vous utilisez des configurations run/debug dans votre ide, veillez à le mettre à jour.
Utilisez ".YOURSITE.net" en tant que domaine_moyen (avec un point au début) lors de la création du cookiem, il devrait alors fonctionner avec tous les sous-domaines.
2) crée le certificat en utilisant le fichier localdev.url
CONSEIL: Si vous rencontrez des problèmes lors de la génération de certificats sous Windows, utilisez plutôt une machine VirtualBox ou VMware.
3) importer le certificat comme indiqué surhttp://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
Si vous utilisez OSX/Chrome, vous pouvez ajouter le certificat SSL auto-signé à votre trousseau système, comme expliqué ici: http://www.robpeck.com/2010/10/google-chrome-mac-os-x -et-auto-signé-certificats-ssl
C'est un processus manuel, mais je l'ai finalement fait fonctionner. Assurez-vous simplement que le nom commun (CN) est défini sur "localhost" (sans le port) et, une fois le certificat ajouté, assurez-vous que toutes les options de confiance du certificat sont définies sur "Toujours faire confiance". Assurez-vous également de l'ajouter au trousseau "Système" et non au trousseau "Connexion".
Si vous utilisez node, pourquoi ne pas les générer avec node? Ce module semble être assez complet:
Notez que je ne générerais pas à la volée. Générez avec un certain type de script de construction pour obtenir un certificat et une clé cohérents. Sinon, vous devrez autoriser à chaque fois le certificat auto-signé nouvellement généré.
sous Windows, j'ai fait confiance au certificat de développement iis en utilisant MMC (démarrer> exécuter> mmc), puis j'ai ajouté le composant logiciel enfichable de certificat, en choisissant "ordinateur local" et en acceptant les valeurs par défaut. Une fois que ce composant logiciel enfichable de certificat est ajouté, développez l'arborescence de certificats de l'ordinateur local et examinez sous Personnel, sélectionnez le certificat localhost, cliquez avec le bouton droit de la souris sur> toutes les tâches> exportation. accepte toutes les valeurs par défaut de l'assistant d'exportation.
Une fois ce fichier enregistré, développez les certificats de confiance et commencez à importer le certificat que vous venez d'exporter. https://localhost
est maintenant approuvé en chrome sans aucun avertissement de sécurité.
J'ai utilisé ce guide résolution n ° 2 du blog MSDN, l'opérateur a également partagé un lien dans sa question à ce sujet, qui devrait également utiliser MMC mais cela a fonctionné pour moi . résolution n ° 2
Il y a plus d'aspects à cela.
Vous pouvez obtenir le protocole TLS (certains disent sans cesse SSL) avec un certificat, auto-signé ou non.
Pour avoir une barre verte pour un certificat auto-signé, vous devez également devenir l’autorité de certification. Cet aspect est absent de la plupart des ressources trouvées lors de mon parcours pour atteindre la barre verte dans ma configuration de développement local. Devenir CA est aussi simple que créer un certificat.
Cette ressource couvre la création du certificat de l'autorité de certification et d'un certificat de serveur. Par conséquent, mon installation a affiché une barre verte sur les hôtes locaux Chrome, Firefox et Edge: https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58
Remarque: dans Chrome, vous devez ajouter le certificat de l'autorité de certification à vos autorités de confiance.
Aller à: chrome://flags/
Activer: Autorise les certificats non valides pour les ressources chargées à partir de localhost.
Vous n'avez pas la sécurité verte, mais vous êtes toujours autorisé pour https: // localhost in chrome.
Mkcert de @FiloSottile rend ce processus infiniment plus simple:
mkcert -install
pour créer une autorité de certification localemkcert localhost 127.0.0.1 ::1
pour créer un certificat de confiance pour localhost dans le répertoire actuelexport NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
.Configuration de base du noeud:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const server = https.createServer({
key: fs.readFileSync('/XXX/localhost+2-key.pem'), // where's me key?
cert: fs.readFileSync('/XXX/localhost+2.pem'), // where's me cert?
requestCert: false,
rejectUnauthorized: false,
}, app).listen(10443); // get creative
Certaines des réponses publiées contiennent des éléments qui m’ont été très utiles pour surmonter également ce problème. Cependant, je m'intéressais aussi au nombre d'étapes minimum et, idéalement, à éviter OpenSSL (sous Windows 10).
Donc, un élément essentiel des réponses (crédit: @ TroyWorks ) est que vous devez modifier votre fichier HOSTS pour créer un serveur fictif, et le mapper à 127.0.0.1. Cela suppose que vous allez faire du développement local.
Dans mon cas, j'utilisais le certificat SS pour sécuriser une prise Web dans NodeJS, et cette prise était connectée à un programme (et non via un navigateur). Donc, pour moi, il était essentiel que le certificat soit accepté sans avertissement ni erreur, et la pièce essentielle consistait à créer le certificat avec un CN approprié (et bien sûr l'accepter dans les autorités de confiance, comme décrit ailleurs dans les réponses). . Utiliser IIS pour créer un certificat auto-signé ne créera pas le CN approprié. J'ai donc découvert la commande simple suivante à l'aide de Powershell:
New-SelfSignedCertificate -DnsName "gandalf.dummy.dev" -FriendlyName "gandalf" -CertStoreLocation "cert:\LocalMachine\My"
Cela doit être exécuté dans la console PS Admin, mais cela fonctionne simplement et place le certificat dans la section "Personnel" du magasin de certificats de LocalMachine . Vous pouvez vérifier qu'il a bien été créé en exécutant:
ls cert:\LocalMachine\My
Pour y faire confiance, copiez-le simplement et collez-le dans "Autorités de certification racines de confiance" à l'aide de Certificate Manager (en vous assurant que vous regardez bien les certificats de l'ordinateur local et non de l'utilisateur actuel!).
Si vous vous liez à ce certificat dans IIS, vous devriez pouvoir appuyer sur https://gandalf.dummy.dev/ et obtenir une connexion sécurisée sans aucun avertissement.
La dernière pièce, qui utilise ceci dans NodeJS, est décrite ci-dessus et dans d'autres réponses SO. Par conséquent, j'ajouterai que sous Windows, il est plus facile de travailler avec un fichier pfx combinant cert et clé privée. Vous pouvez exporter facilement un pfx à partir du gestionnaire de certificats, mais cela a une incidence sur la façon dont vous l'utilisez dans NodeJS. Lors de l'instanciation d'un serveur à l'aide du module "https", les options que vous utiliseriez (au lieu de "clé" et "cert") seraient "pfx" et "phrase secrète", comme dans:
var https = require('https');
var options = {
pfx: fs.readFileSync('mypfxfile'),
passphrase: 'foo'
};
var server = https.createServer(options);