miércoles, 9 de abril de 2025

Nginx(XII) OpenResty Uvicorn. DNS. Configurar ambos para usar un certificado WildCard

 0. Introducción

En un post anterior vimos como crear una entidad certificadora CA y a partir de esta crea los certificados "wildcard" para los servidores.

Hay que recordar que para que el cliente reconozca como válido el certificdo wildcard del servidor que se conecta se debe:

  1. Instalar el certificado raiz de la CA en el navegador
  2. Asignar la IP del servidor a un nombre de dominio compatible con el dominio wildcard. (Si nuestro dominio wildcard es "*.municipio.es" entonces cualquier nombre de dominio como pepe.municipio.es o miservidor.municipio.es son válidos)
  3. Para asignar la dirección IP al dominio compatible en cuestión se debe hacer en el fichero "/etc/hosts" o decirle al administrador de red que le de la entrada al servidor de dominio (DNS)de la red.

Para asignar la IP al dominio utilizando un DNS:

a. Si usamos BIND9 (DNS clásico de Linux)

1. Se añade esta entrada al fichero /etc/bind/zones/db.municipio.es, (donde el nombre de dominio viene reflejado en el nombre del fichero)

miservidor   IN   A    192.168.28.XXX

En este caso el dominio asignado a la IP 192.168.28.XXX sería miservidor.municipio.es

2. Asegurarnos qu esta zona esté definida en /etc/bind/named.conf.local

zone "municipio.es" {
    type master;
    file "/etc/bind/zones/db.municipio.es";
};

3. Reiniciar el servicio DNS:

sudo systemctl restart bind9


b. Si usuamos DNS en Acive Directory

Puede haver un link a la configuración del DNS en un servidor como este :

%SystemRoot%\system32\mmc.exe %SystemRoot%\system32\dnsmgmt.msc

Y aparecer una pantalla como esta:


Vamos a la zona concreta de "municipio.es"

En click derecho -> Nuevo hosst (A o AAAA)

En nombre escribimos "miservidor"

En la dirección IP 192.168.28.XXX

Guardamos  y el nuevo FQDN (miservidor.municipio.es) ya apunta a la IP dada

Para probar ejecutamos uno de destos 2 comandos:

nslookup miservidor.municipio.es

dig miservidor.municipio.es

1. Configurar FastHTML (con uvicorn) para que se ejecute sobre un dominio

La pieza clave es la función __main__

if __name__ == "__main__":
  import uvicorn
  app.mount("/static", fh.StaticFiles(directory="/home/eduard/MyPython/11.softprop-01/static"), name="static")
  cert_path="/home/eduard/MyPython/11.softprop-01/static/certs/wildcard.municipio.es."
  uvicorn.run(app, host="miservidor.municipio.es", port=5001,	
    ssl_keyfile =cert_path+"key", 
    ssl_certfile=cert_path+"crt")

Hay que tener en cuenta que :

  • "app.mount" es para poder utilizar ficheros estáticos
  • En  uvicorn.run(app, host="miservidor.municipio.es", port=5001,  se puede cambiar el host="miservidor.municipio.es" por "192.168.28.XXX"
  • Y no puede fatar las referencias a las clave y certificado de servidor
Como tenemos dos programas python que se estan ejecutando sobre uvicorn (openresty.py y menu_main.py), hay que ealizar esta operaciónb en cada uno de ellos y controlando que los puertos no se solapen!!!

2. Buscar los ficheros de configuración de nginx afectados por el cambio anterior

Los ficheros afectados son nginx.conf y nginx.initial

cambio en nginx.conf:

-- cambiar:
upstream softpropsrv {
    server 0.0.0.0:5001;

-- por:
upstream softpropsrv {
    server 192.168.28.XXX:5001;


cambio en nginx.initial:

-- cambiar:
-- local res, err = httpc:request_uri("http://127.0.0.1:5000/auth", {

-- por:
local res, err = httpc:request_uri("https://edu.tavernes.es:5000/auth", {

3. Ver la ruta de los certificados de nginx.conf

En nginx.conf tenemos que comprobar que esta parte apunta a los certificdos de servidor correctos

server {
        #->listen       8001;
        listen       8449 ssl; #->New
        
        server_name  localhost;
        #server_name  edu.tavernes.es;
        
        #-> Begin new
        # SSL certificate configuration
        ssl_certificate     /usr/local/openresty/nginx/conf/wildcard.municipio.es.crt;
ssl_certificate_key /usr/local/openresty/nginx/conf/wildcard.municipio.es.key;
# Optional SSL settings for security and performance ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # Common proxy settings (optional) proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https;





No hay comentarios :

Publicar un comentario