es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo un problema al asegurar una API de Express con TLS.

Tengo una API REST ejecutándose en Node JS con Express.

Sigo teniendo problemas con la política de CORS porque el frontend es HTTPS y la API del backend es HTTPS lo cual se reporta frecuentemente, pero no siempre, como una violación.

Estoy tratando de asegurar la API con un certificado Let’s Encrypt, pero parece que me falta algo.

Aquí está el código que inicializa el servidor Express:

require('dotenv').config();

const https = require("https"),
fs = require("fs");

const app = require("./src/app");

const port = process.env.PORT || 8000;

https
.createServer(
    {
        key: fs.readFileSync('/etc/letsencrypt/live/myserver.com/privkey.pem', 'utf8'),
        cert: fs.readFileSync('/etc/letsencrypt/live/myserver.com/fullchain.pem', 'utf8')
    },
    app
)
.listen(8000, function() {
    console.log('HTTPS listening on PORT 8000');
});

¿Hay otro enfoque? ¿O simplemente lo estoy haciendo mal?

CURL aún funciona en HTTP lo cual me sorprende. No debería haber un servidor HTTP escuchando en 8000. Las llamadas GET funcionan sin la configuración SSL, pero las llamadas POST siempre fallan.

Todas las APIs funcionan localmente, solo cuando lo empujo a producción es cuando falla. Pero entonces, localmente, no se está ejecutando HTTPS, por lo que no hay ninguna violación.

No he visto publicaciones que aborden esto específicamente, así que tengo que preguntarme qué me falta. Esto debe ser un escenario común.

Gracias por cualquier ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Configuración de HTTPS con Let’s Encrypt en Node.js/Express para una API

    Si tiene problemas con violaciones de CORS porque su frontend se ejecuta en HTTPS y su API también se ejecuta en HTTPS, puede haber un problema con la forma en que está configurando HTTPS en su servidor.

    Una forma de proteger su API con un certificado de Let’s Encrypt es configurar HTTPS con Node.js/Express. Aquí hay un código de muestra que inicializa el servidor Express con HTTPS:

    require('dotenv').config();
    
    const https = require("https"),
    fs = require("fs");
    
    const app = require("./src/app");
    
    const port = process.env.PORT || 8000;
    
    https
    .createServer(
        {
            key: fs.readFileSync('/etc/letsencrypt/live/myserver.com/privkey.pem', 'utf8'),
            cert: fs.readFileSync('/etc/letsencrypt/live/myserver.com/fullchain.pem', 'utf8')
        },
        app
     )
     .listen(8000, function() {
         console.log('HTTPS listening on PORT 8000');
     });
    

    Este código especifica la ubicación de los archivos de certificado de Let’s Encrypt e inicializa el servidor Express con HTTPS. Sin embargo, si aún experimenta problemas con las violaciones de CORS o las solicitudes POST, puede haber otros factores a considerar.

    Por ejemplo, CURL todavía funciona con HTTP porque puede haber un servidor HTTP escuchando en el puerto designado (8000). También es posible que existan problemas con el diseño de su API o la configuración de TLS.

    Por lo tanto, es importante revisar cuidadosamente la configuración del servidor, el diseño de la API y la configuración de TLS para identificar la causa subyacente del problema. También puede buscar otras soluciones como proxies inversos, configurar encabezados CORS o usar herramientas de terceros para asegurar su API.

Comments are closed.