Plesk + Dotnetnuke + Let’s Encrypt = CMS + SSL

Algunos gestores de contenidos, como en este caso Dotnetnuke, tienen reglas propias de redirección que pueden interferir a la hora de instalar certificados gratuitos de Let’s Encrypt desde panel de control Plesk. Existen varias opciones, pero una de la más sencilla para este problema concreto es cambiar el tratamiento de las redirecciones del CMS:

    <friendlyUrl defaultProvider="DNNFriendlyUrl">
      <providers>
        <clear />
        <add name="DNNFriendlyUrl" type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" includePageName="true" regexMatch="[^a-zA-Z0-9 _-]" urlFormat="humanfriendly" />
      </providers>
    </friendlyUrl>

Sustituyendo «advanced» por «humandfriendly«, lo que dejará el sitio añadiendo la extensión .aspx de nuevo generando el directorio «\.well-known\acme-challenge\» que incluye la descarga del ficheros sin extensión como texto plano en su propio web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.webServer>
      <validation validateIntegratedModeConfiguration="false" />
      <staticContent>
         <clear />
         <mimeMap fileExtension="." mimeType="text/plain" />
      </staticContent>
      <handlers>
      <clear />
      <add name="StaticFile" path="*" verb="GET" modules="StaticFileModule" resourceType="Either" />
      </handlers>
   </system.webServer>
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</configuration>

Ahora podemos volver a dejar la redirección como «advanced». Si, la otra opción es añadir el fichero anterior en el directorio indicado, Let’s Encrypt creará una petición de comprobación del tipo:

http://midominio.es/.well-known/acme-challenge/8-TsVgjMp5v3BRkUVk4zwdiCVDlSkDaf…b

A partir de versiones más modernas, podemos añadir una configuración específica de URLs amigables desde la configuración Host en Sistemas > Configuración del sisstema > Configuración Avanzada > Configuración de URLs amigables

Añadimos las reglas de redirección de IIS para no afectar al directorio:

<configuration>
<system.webServer>
    <rewrite>
      <rules>
        <clear />
        <rule name="LetsEncrypt" stopProcessing="true">
            <match url=".*" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{REQUEST_URI}" pattern=".well-known/" />
            </conditions>
            <action type="Rewrite" url="{REQUEST_URI}" />
        </rule>
    </rewrite>
</system.webServer>    
</configuration>

 

Si pese a ello sigue sin poder acceder a la ruta, puedes deshabilitar temporalmente desde Plesk, el soporte para .NET y renovar manualmente.

Lista de revocación en servidor externo

Dependiendo de la complejidad de la infraestructura PKI de la organización, podemos desde la entidad de certificación publicar automáticamente en servidores externos, en este caso IIS, los datos.

Para ello compartimos una carpeta en el equipo con el servidor web asignando permisos de acceso y NTFS sobre el nombre de la máquina.

Añadimos en la publicación de la CA una nueva ruta hacia nuestro servidor local, el nombre del fichero y la ruta final debe ser el mismo que el expuesto externamente para el CRL:

file://\\servidorLocal\CA\<nombre de CA><sufijo de nombre de lista CRL><diferencias entre listas CRL permitidas>.crl

En nuestra entidad de certificación tendremos de la siguiente manera la publicación interna y el acceso de consulta externo, por ejemplo:

 

Para asegurarnos que el servidor es capaz de alcanzar las rutas de publicación, con el botón derecho sobre «Certificados revocados» pulsamos «Todas las tareas» -> «Publicar»

 

Comprobar las listas de revocación desde equipo externo

Existe la alternativa de utilizar OCSP para la comprobación de las listas, lo veremos en otro momento.

Exportar certificados SSL con CA intermedias incluidas

Los certificados SSL emitidos que requieran de entidades intermedias, a la hora de exportar es posible añadirlos en un único PFX (Personal Information Exchange). En cualquier equipo con el certificado que queremos exportar y el certificado intermedio de confianza instalado (en este caso RapidSSL)

Seleccionamos exportar con la clave privada para tener el archivo PFX con contraseña correspondiente:

Debemos seleccionar «Export all extended properties» para incluir toda la información en un único archivo:

Si exportamos, con y sin, esta opción veremos que el archivo generado difiere en tamaño igualmente. Ya podremos importar sin problemas en cualquier dispositivo, servicio cloud o similar.

Certificados SSL

Cuando visitamos un sitio web y nos aparece en el navegador el prefijo https:// nos indica que:

  • Existe un certificado no caducado: los certificados caducan cada cierto tiempo o son revocados/cancelados en la lista de comprobación de sus emisores.
  • Existe un certificado digital emitido para este sitio: la dirección URL de la web coincide la del certificado.
  • Existe un certificado emitido por una entidad de confianza: confiamos en un emisor y sus listas.

¿Quiere decir que el sitio web es seguro? No. La lista de entidades emisoras de certificados de confianza es diferente para Microsoft, Firefox, Apple… con sus correspondientes almacenes. Es perfectamente posible que recibamos con Chrome un aviso de seguridad y con Firefox no, teniendo instalados ambos en el mismo equipo.

Las entidades de certificación a su vez puedes emitir certificados intermedios a otras entidades, y esta emitir los suyos. Algo así como diría Groucho Marx: «la parte contratante de la primera parte será considerada como la parte contratante de la primera parte»

Dado que se emiten y cancelan millones de certificados cada día, tanto Microsoft como Apple van introduciendo las actualizaciones de entidades automáticamente en sus sistemas operativos, y las entidades, con sus certificados de sitios e intermedios.

En la mayoría de casos este funcionamiento predeterminado facilita el uso general y acceso a sitios web, aunque podemos hacerlo de forma manual y desactivar esta opción en Windows:

Si pese a ello seguimos pensando que todo esta bien, tenemos la falsa idea de seguridad con el candado de nuestro navegador, pongamos otro ejemplo; hemos visto que la lista de entidades de certificación es difícil de gestionar tanto para empresas como usuarios finales, sería posible con un ataque main-in-the-middle con un certificado válido interceptar el tráfico SSL: sí.

 

Lecturas recomendadas:

SSL Error en Dell OpenManage Systems Management Tools

Cada fabricante de hardware tiene su propia suite, más o menos amigable, para facilitar a los administradores una gestión de servidores desde uno solo a un Data Center completo:  Dell, HPE, Fujitsu, IBM, Lenovo, SuperMicro… con posibilidades de integración de Sistemas Operativos, monitorización, despliegue, networking, provisionamiento… en este caso se trata de OpenManage de Dell; curiosamente tras instalar en varios servidores uno de ellos, con la misma configuración que el resto, no era posible conectar con el software OMSA via web en la dirección y puertos por defecto:

https://localhost:1311

Después de verificar la instalación sobre Windows Server 2012 R2 y comprobar los servicios iniciados:

  • DSM SA Connection Service: servicios web para conexión
  • DSM SA Data Manager: recopilación de datos, monitorización
  • DSM SA Event Manager: registro de eventos en el sistema operativo
  • DSM SA Shared Services: inventario inicial para SNMP y CIM

Seguía apareciendo un error genérico sobre Internet Explorer 404 como inaccesible, sobre Firefox apareció un error más descriptivo:

An error occurred during a connection to localhost:1311 SSL received a weak ephemeral Diffie-Hellman key in Server Key Exchange handshake message. (Error code: ssl_error_weak_server_ephemeral_dh_key)

Con lo que desactivando en about:config del navegador los dos parámetros:

  • security.ssl3.dhe_rsa_aes_128_sha
  • security.ssl3.dhe_rsa_aes_256_sha

Ya era posible acceder al gestor y desde:

Preferencias -> Configuración General  -> Certificado X.509

Cambiar el certificado por uno válido en IE y reiniciar el servicio «DSM SA Connection Service»