L'installation de Certificat SSL Sur le Serveur de Noeud
J'ai créé un certificat auto-signé et installé sur un serveur apache ainsi que sur node.js(le port 3000). Sur localhost les deux https://localhost
et https://localhost:3000
fonctionne bien.
Alors, j'ai acheté GoDaddy certificat SSL Standard et l'a installé sur le serveur(http://gatherify.com
). Maintenant https://gatherify.com
fonctionne bien, mais ssl sur le nœud n'est pas de travail.
Lorsque j'accède à https://gatherify.com:3000
- je obtenir "La connexion a été interrompue".
J'ai exécuté curl:
root@host [~]# curl -v -s -k https://gatherify.com:3000
* About to connect() to gatherify.com port 3000 (#0)
* Trying 108.160.156.123... connected
* Connected to gatherify.com (108.160.156.123) port 3000 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* NSS error -5938
* Closing connection #0
* SSL connect error
Des suggestions pour résoudre ce problème?
Mise à JOUR
*CÔTÉ SERVEUR :*
var io = require('socket.io'),
connect = require('connect'),
fs = require('fs'),
var privateKey = fs.readFileSync('cert/server.key').toString();
var certificate = fs.readFileSync('cert/server.crt').toString();
var options = {
key: privateKey,
cert: certificate
};
var app = connect(options).use(connect.static('../htdocs/node/'));
app.listen(3000);
var server = io.listen(app);
server.sockets.on('connection', function(socket) {
console.log("Connected");
});
CÔTÉ CLIENT:
<html> <head>
<script type = "text/javascript" src = "https://gatherify.com:3000/socket.io/socket.io.js"></script>
<script type = "text/javascript">
var socket = io.connect('https://gatherify.com:3000', {secure:true});
</script>
</head><body></body></html>
- Le Port 3000 sur l'hôte n'utilise pas SSL, tout à fait normale, HTTP, donc y accéder avec une URL https échouera.
- avez-vous le
key
etcrt
fichiers de certificat? - Eh bien, alors comment puis-je résoudre ce problème?
- Oui, j'ai ces fichiers...
- votre serveur nodejs travailler avec expressjs?
- je ne suis pas en utilisant expressjs... j'ai mis à jour la question avec le serveur et côté client code.
- Comment au sujet de changer pour quelque chose comme
var app = require('https').createServer(options)
? - il n'a fait aucune différence aussi. Encore je obtenir de Connexion a été interrompue
- Avez-vous supprimer
var app = connect(options).use(connect.static('../htdocs/node/'));
et de la remplacer par la ligne ci-dessus? - //var app = connect(options).utilisation(se connecter.statique('../htdocs/node/')); var app = require('https').createServer(options); app.écouter(3000); var server = io.écouter(app); c'est ce que j'ai fait
- Je ne peux pas tester moi-même de l'atm, mais jetez un oeil à
https://github.com/LearnBoost/socket.io/issues/1011
pour un échantillon.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez exécuter un node.js application sur le port 3000 (derrière) HTTPS, vous devez configurer un service de proxy sur le port 443 proxy requêtes HTTPS sur le port 3000.
Vous n'avez pas parlé de ce serveur que vous avez en cours d'exécution sur le port 443 en ce moment (est-il d'Apache?) mais vous pouvez
Quand tout est correctement configuré, les utilisateurs peuvent visiter "https://gatherify.com" ou "https://blah.gatherify.com" (sans l'aide de :numéros de port) et tout sera sécurisé par SSL. 😉
Installer des certificats Côté Client (dans Node.js)
Si vous avez besoin d'un node.js client pour être en mesure de reconnaître votre auto-attribué ou à un prix avantageux acheté des certificats SSL, vous pouvez utiliser ssl-racine-cas, qui est disponible sur ngp.
Cela rendra votre certs à la disposition du cœur
https
module ainsi que les modules qui en dépendent commerequest
etsocket.io-client
sans supprimer la normale ssl cert (ce qui est le comportement par défaut pour une raison étrange).