Servidor HTTPS en C# en Ubuntu
Estoy tratando de establecer una conexión HTTPS en Ubuntu desde mi servidor HTTP de C#. He habilitado HTTPS en mi HTTPListener como lo haría en Windows, sin embargo, no puedo establecer una conexión.
Según la documentación:
Si creas un HttpListener usando https, debes seleccionar un Certificado del Servidor para ese listener. De lo contrario, una solicitud HttpWebRequest de este HttpListener fallará con un cierre inesperado de la conexión.
Esto es exactamente lo que me está sucediendo. La documentación sugiere:
Puedes configurar Certificados de Servidor y otras opciones del listener usando Network Shell (netsh.exe). Consulta Network Shell (Netsh) para obtener más detalles. Este ejecutable comenzó a enviarse con Windows Server 2008 y Windows Vista.
Dado que estoy en Ubuntu y mi servidor se está ejecutando en Ubuntu Server, no tengo acceso a esta herramienta. ¿Cómo puedo lograr el mismo efecto en Ubuntu?
davy.ai
Para habilitar HTTPS en Ubuntu, deberás generar un certificado SSL y configurar tu servidor HTTP para usarlo. Aquí tienes los pasos que puedes seguir:
Puedes generar un certificado SSL autofirmado utilizando la herramienta de línea de comandos OpenSSL. Aquí tienes un ejemplo:
Este comando generará un certificado SSL válido por 365 días, con una clave RSA de 2048 bits. La clave privada se guardará en
/etc/ssl/private/server.key
, y la clave pública (o certificado) se guardará en/etc/ssl/certs/server.crt
.Para habilitar HTTPS en tu servidor HTTP en C# que se ejecuta en Ubuntu, debes modificar tu código para utilizar el certificado SSL que acabas de generar. Aquí tienes un ejemplo:
Observa que agregamos el prefijo
https://` al escuchador HTTP y añadimos el esquema
AuthenticationSchemes.Anonymous` para permitir solicitudes no autenticadas. También necesitamos especificar el certificado SSL que generamos anteriormente:Aquí creamos un objeto
sslConfig
que especifica el certificado SSL a utilizar (server.crt
), junto con algunas otras opciones. Luego, creamos un nuevo objetoHttpsListener
que envuelve nuestroHttpListener
original y comienza a escuchar solicitudes HTTPS.¡Eso debería ser todo! Ahora puedes probar tu servidor HTTPS accediendo a él mediante un navegador web o
curl
, y deberías ver “¡Hola, mundo!” en texto plano.Ten en cuenta que este código de ejemplo utiliza la implementación de Mono para SSL/TLS. Si estás usando la implementación de .NET Core, deberías consultar su documentación sobre cómo configurar HTTPS.