Comment puis-je utiliser un certificat auto-signé pour un HTTPS Node.js le serveur?
J'ai commencé à écrire un wrapper pour une API qui exige que toutes les demandes soient sur HTTPS. Au lieu de faire des requêtes à l'API réel alors que je suis en train d'élaborer et de le tester, je voudrais que mon propre serveur localement qui se moque de l'réponses.
Je suis confus sur la façon de générer les certificats-je besoin de créer un serveur HTTPS et d'envoyer des demandes.
Mon serveur ressemble à quelque chose comme ceci:
var options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
https.createServer(options, function(req, res) {
res.writeHead(200);
res.end('OK\n');
}).listen(8000);
Le pem fichiers ont été générés avec:
openssl genrsa 1024 > key.pem
openssl req -x509 -new -key key.pem > cert.pem
Et une demande ressemble à quelque chose comme ceci:
var options = {
host: 'localhost',
port: 8000,
path: '/api/v1/test'
};
https.request(options, function(res) {
res.pipe(process.stdout);
}).end();
Avec cette configuration, j'obtiens Error: DEPTH_ZERO_SELF_SIGNED_CERT
, donc je pense que j'ai besoin d'ajouter un ca
option pour la demande.
Donc ma question est comment dois-je générer les suivantes:
- Le serveur
key
? - Le serveur
cert
? - La
ca
de la demande?
J'ai lu quelques choses à propos de générer les certificats auto-signés avec openssl, mais ne semble pas possible d'envelopper ma tête autour de lui et de déterminer qui des clés et des certificats à utiliser où dans mon nœud de code.
Mise à jour
L'API fournit un certificat d'autorité de certification à utiliser à la place des valeurs par défaut. Le code suivant fonctionne à l'aide de leur certificat et c'est ce que je veux reproduire localement.
var ca = fs.readFileSync('./certificate.pem');
var options = {
host: 'example.com',
path: '/api/v1/test',
ca: ca
};
options.agent = new https.Agent(options);
https.request(options, function(res) {
res.pipe(process.stdout);
}).end();
Vous devez vous connecter pour publier un commentaire.
Mise à jour (Novembre 2018): avez-vous besoin auto-signé certs?
Ou seraient de véritables certificats d'obtenir le travail fait mieux? Avez-vous pensé à l'un de ces?
(Note: Let's Encrypt peut également délivrer des certificats à des réseaux privés)
ScreenCast
https://coolaj86.com/articles/how-to-create-a-csr-for-https-tls-ssl-rsa-pems/
Complet, exemple de Travail
https://github.com/coolaj86/nodejs-self-signed-certificate-example
À l'aide de
localhost.greenlock.domains
comme un exemple (il pointe vers 127.0.0.1):server.js
client.js
Et le script qui fait que les fichiers de certificat:
make-certs.sh
Par exemple:
J'espère que cela met le clou dans le cercueil sur celui-ci.
Et un peu plus d'explication: https://github.com/coolaj86/node-ssl-root-cas/wiki/Painless-Self-Signed-Certificates-in-node.js
Installer privé cert sur iOS Mobile Safari
Vous devez créer une copie de l'autorité de certification racine d'un format DER avec un .crt extension:
Alors vous pouvez simplement servir de ce fichier avec votre serveur web. Lorsque vous cliquez sur le lien, il vous sera demandé si vous souhaitez installer le certificat.
Pour un exemple de comment cela fonctionne, vous pouvez essayer d'installer MIT de l'Autorité de certification: https://ca.mit.edu/mitca.crt
Des Exemples Liés À
openssl s_client -showcerts -connect www.example.com:443 </dev/null
Essayez d'ajouter cette page à vos options de demande de
Votre génération de la clé semble ok. Vous ne devriez pas besoin d'un ca parce que vous n'êtes pas rejeter unsigned demandes.
Ajouter .toString() à la fin de votre readFileSync méthodes de sorte que vous êtes en fait du passage d'une chaîne, pas un objet de fichier.
Cette procédure permet de créer à la fois une autorité de certification & un certificat :
saisir cette
ca.cnf
fichier à utiliser comme un raccourci configuration :wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf
créer 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
maintenant que nous avons notre autorité de certification dans
ca-key.pem
etca-cert.pem
, nous allons générer une clé privée pour le serveur :openssl genrsa -out key.pem 4096
saisir cette
server.cnf
fichier à utiliser comme un raccourci configuration :wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf
générer de la demande de signature de certificat à l'aide de cette configuration :
openssl req -new -config server.cnf -key key.pem -out csr.pem
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, avec plus d'informations sur la façon d'utiliser ces certificats.
Essayez d'ajouter