Closed gentooza closed 3 years ago
Hola. Para pruebas podrías usar un certificado autofirmado, como indicas, pero cuando lo publiques para comunicar a los clientes, tendrás problemas de seguridad en los navegadores, y no funcionará. Esto se debe a las implementaciones de seguridad de los navegadores, al tratar con certificados autofirmados. Eso es lo que nos pasaba cuando implementamos/desplegamos bajo ssl. Por lo que en la demo lo dejamos sin ssl.
Para implementar el ssl puedes mirar en la documentación de socket.io. En la parte cliente sería simplemente cambiar la URL.
Un saludo
aham,
la cosa es que hemos probado con un autofirmado porque los certificados que creamos con let's encrypt automáticamente, se crean con el usuario root, y al intentar leerlos en la aplicación servidor, daba fallo de permisos. :-/ le damos una vuelta y si conseguimos algo lo compartimos.
gracias!
Hola @gentooza
Seria estupendo que compartas tu experiencia. Creo que se puede generar certificados sin ser root. O intentar cambiar los permisos para que sean accesibles.
Además al habilitar https quedaría disponible la funcionalidad de geolocalización "Donde estoy" conjuntamente con la comunicación en tiempo real, al desplegar el cliente también bajo https.
vale!
Es como dices, el problema era el certificado autofirmado.
creo un certificado con let's encrypt lo único es que es del usuario root y con permisos imposibles para le usuario que ejecuta el servidor. (600)
Lo preparamos copiamos su privkey y fullchain a la carpeta de la aplicación servidor de rtcmapping, y cambiamos el propietario al usuario que ejecuta la aplicación servidor.
cambiamos el código de la aplicación servidor a este, donde cargamos el privkey y el fullchain.
var fs = require('fs');
var app = require('express')();
//var http = require('http').Server(app);
var privateKey = fs.readFileSync('xxxxxxxxx/rtcm-server/privkey.pem', 'utf8'); var certificate = fs.readFileSync('xxxxxxxxxx/rtcm-server/fullchain.pem', 'utf8');
var certs = {key: privateKey, cert: certificate}; var http = require('https').createServer(certs, app);
var io = require('socket.io')(http);
4. modificamos aplicación cliente
en *src/org/geowe/rtcmapping/RealTimeEngine.js* cambiamos la URL de la función *connect* a usar https.
obligamos al alojamiento a redirigir el tráfico de la aplicación cliente a ser sólo https.
y está conectando y reconectando. Creo que va!
¡Estupendo! me alegro de que funcione. Cerramos este issue. Si te parece bien podemos, y gracias a lo bien que lo has detallado, podemos dejarlo documentado en un pequeño artículo en el blog de GeoWE. Por supuesto aparecerás como autor de la solución y enlazamos tu github.
Un saludo
claro!
genial si es útil
un saludo!
Hola!
Sería interesante poder activar https en la parte del servidor. se podría documentar como hacerlo? o modificar el código para su configuración?
un saludo!
(Editado) consigo que el servidor se ejecute creando un certificado autofirmado, y cambiando el código de index.js así:
pero creo que me falla la creación del proxy de apache :-/