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.

«Recuperar» claves privadas de certificados SSL en IIS

En ocasiones es posible tener alguna que otra dificultad a la hora de crear peticiones (CSR) o renovar si no se realizan los pasos con cuidado en IIS. Debemos tener en cuenta que a la hora de crear una petición de certificado, la clave privada se almacena en el equipo que la realiza y solo en este es posible recuperarla.

Pese a ello en ocasiones se producen errores en el proceso, llegados a este extremo podemos intentar dos opciones:

  1. Desde la linea de comandos podemos intentar reparar el almacen de certificados:
    certutil -repairstore my "ThumbprintDelCertificadoConoSinEspacios"

    Si el comando encuentra las claves privadas asociadas al certificado indicado con el thumprint las asocia, en otros casos es posible que muestre errores del tipo «Insertar tarjeta inteligente» ya que busca en todos los medios y proveedores criptográficos existentes, en tal caso no podrá acabar.

    NOTA: este comando también se puede utilizar para asociar las claves privadas con la renovación de un certificado CER de manera rápida dentro del mismo equipo, es decir, certificado completo del año 2010 (PFX) y renovación de 2011 (CER) en el mismo almacén de certificados.

  2. Si hemos solicitado el certificado a una autoridad online, es posible que tenga almacenadas las claves privadas en la solicitud web, en este caso podremos unirlas con el certificado de respuesta para obtener el PFX resultante mediante OpenSSL, puedes probar online pero nunca en producción
    openssl pkcs12 -export -inkey clave.pem -in pki.crt -out certificadoCompleto.pfx

 

NOTA: Una pequeña aclaración rápida, los archivos CRT contienen la información entre las etiquetas —–BEGIN CERTIFICATE—– y —–END CERTIFICATE—– mientras que las claves de ficheros PEM utilizan: —–BEGIN RSA PRIVATE KEY—– y —–END RSA PRIVATE KEY—– habitualmente.

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: