Instalar certificado SSL en nginx en Windows Server

Linux

1. Generar el CSR (Certificate Signing Request)

Para esto necesitas OpenSSL (se instala aparte en Windows o viene con Git Bash, WSL, etc.).

openssl req -new -newkey rsa:2048 -nodes -keyout dominio.key -out dominio.csr
  • dominio.key → tu clave privada (guárdala bien, nunca la compartas).

  • dominio.csr → el archivo CSR que enviarás a la Autoridad Certificadora (CA).

Durante la generación te pedirá datos:

  • Country Name (C) → código de país (ej: MX).

  • State (ST) → estado/provincia.

  • Locality (L) → ciudad.

  • Organization (O) → nombre de la empresa (o personal).

  • Organizational Unit (OU) → opcional.

  • Common Name (CN) → tu dominio tyc.dominio.com

  • Email Address → tu correo.

2. Enviar el CSR a la CA

  • Envías el .csr a la entidad certificadora (ejemplo: Verisign, DigiCert, Sectigo, etc.).

  • Te devolverán uno o varios archivos:

    • certificado principal (dominio.crt o .cer).

    • certificados intermedios/CA bundle (a veces en un archivo aparte).

3. Preparar los archivos para Nginx

Crea una carpeta (ejemplo: C:\nginx\certs) y coloca dentro:

dominio.key
dominio.crt
ca_bundle.crt   (si la CA lo entrega)

Si te dieron varios .crt, normalmente se

type dominio.crt ca_bundle.crt > fullchain.crt

Ahora tendrás:

  • Clave privada: dominio.key

  • Certificado completo: fullchain.crt


4. Configurar Nginx

En tu nginx.conf, dentro del bloque server:


# Archivo nginx.conf completo para Windows con HTTPS en puerto 444
worker_processes  1;            # Solo un worker, tráfico bajo.

events {
    worker_connections  1024;   # Cada worker puede manejar hasta 1024 conexiones simultáneas.
}

http {
    include             mime.types;
    default_type        application/octet-stream;
    
    access_log logs/access.log;
    error_log logs/error.log;
    
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;

    keepalive_timeout   600;     # Conexiones abiertas máximo 10 minutos

    #gzip  on;  # Opcional: compresión

    ################################################################
    # BLOQUE HTTPS
    ################################################################
    server {
        listen       444 ssl;
        server_name  sub1.dominio.com www.sub1.dominio.com;

        # Certificados SSL
        ssl_certificate     C:/nginx-1.28.0/certs/fullchain.crt;
        ssl_certificate_key C:/nginx-1.28.0/certs/sub1_dominio_com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        # Reverse proxy
        location / {
            proxy_pass http://127.0.0.1:5000;

            # Headers para proxy
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # Timeouts
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;

            # Buffers
            proxy_buffers 16 32k;
            proxy_buffer_size 64k;
        }

        # Páginas de error
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

5. Probar y reiniciar Nginx

  1. Verifica la configuración:


nginx -t

  • (si usas Windows, abre cmd en la carpeta de Nginx y ejecuta eso).

  • Reinicia Nginx:

  • nginx -s reload


    Con esto, Nginx servirá tu sitio en https://tyc.dominio.com


    General CSR personalizado

    [req]
    default_bits       = 2048
    prompt             = no
    default_md         = sha256
    req_extensions     = req_ext
    distinguished_name = dn
    [dn]
    C  = MX
    ST = CDMX
    L  = Ciudad de México
    O  = Company ASP
    OU = IT
    CN = sub1.dominio.com
    [req_ext]
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = sub1.dominio.com
    DNS.2 = www.sub1.dominio.com

    Y luego generas el CSR:

    openssl req -new -nodes -out sub1_dominio_com.csr -newkey rsa:2048 -keyout sub1_dominio_com.key -config openssl.cnf


    Así la CA te dará un certificado válido para los dos.
    Después, en Nginx o IIS, solo tienes que usar ese mismo .crt y .key.


    Probar certificado SSL en nginx:

    curl -vk https://sub1.dominio.com:444


    tags: openssl, csr, nginx windows, https, ssl, certificado digital, fullchain, key, crt, configuración nginx, reverse proxy, puerto 444, puerto 443, iis, windows server

    En esta sección encontrarás una mezcla de códigos recopilados de fuentes públicas de Internet y otros creados por ASP TEAM. Compartimos recursos útiles de buena fe para formar una base de conocimiento en el desarrollo de aplicaciones en ASP Clásico.