«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.

CRL: Lista de revocación de certificados

En ocasiones debemos configurar el acceso interno y externo a las listas de revocación de certificados con Entidades de Certificación de confianza, habitualmente autoemitidas. Si hemos comprado un certificado, estas estarán disponibles y no tendremos ente problema seguramente. En otros casos en los que obtenemos errores indicando que no es posible acceder a la lista de revocación de certificados (CRL), debemos comprobar:

  • El dominio en el que se publica esta accesible dentro de la red interna y desde fuera de ella.
  • Podemos navegar y acceder a la lista CRL via web
  • No aparecen errores relacionados en la Autoridad de certificación

Desde cualquier equipo con Windows esta disponible en la linea de comandos «certutil» en la que debemos añadir el parámetro con la URL que queramos verificar:

certutil -URL «http://ejemplo.mainmind.com:8682/CertEnroll/CA%20nombre%20compuesto.crl»

Seleccionamos el certificado CER y recuperamos las direcciones web del CRL, en este caso vemos que pese a poder navegar y acceder no es posible acceder…

Después de comprobar todos los pasos, activamos temporalmente la visualización/listado del servidor que contine los CRL y nos encontramos por fin con el error! El nombre de la CA con la que se publican es demasiado largo y con espacios, por lo que con la seguridad predeterminada de IIS no es posible acceder.

Es posible deshabilitar en la aplicación de IIS esta verificación, pero no es una práctica de seguridad recomendada. Por lo que otra opción sencilla sería acortar el nombre desde la CA en la configuración de extensiones, por ejemplo: «http://ejemplo.mainmind.com/listado.crl»

Volvemos a emitir e instalar el certificado, en el que aparecerá la nueva CRL y volvemos a verificar con certutil, ahora sin problemas de acceso:

 

 

Forzar redirección web HTTPS con IIS

En breve el navegador Chrome de Google mostrará las webs sin certificados mensajes de advertencia, además de relegarlos en su motor de búsqueda… para forzar desde Internet Information Server la redirección de toda las URLs debemos añadir en el archivo web.config:

<system.webserver>
    <rewrite>
      <rules>
        <rule name="Forzar HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="true" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
<system.webserver>

 

Utilidades gratuitas para facilitar la emisión e instalación de certificados sobre IIS:

 

Error SSL para extremos en Exchange 2013

En ocasiones la renovación o instalación de certificados suelen causar algún que otro contratiempo; pese a que desde la consola web es un proceso sencillo, es posible que aparece un error del tipo:

«Error al usar la configuración de SSL para el extremo 0.0.0.0:444. El código de estado del error se incluye en los datos devueltos.»

ID: 15021 HttpEvent

Error SSL Eventlog 444

Únicamente deberemos volver a enlazar manualmente el certificado con el puerto SSL utilizado, en este caso el 444 que ha quedado huérfano y como efecto secundario provoca la pagina en blanco al acceder a nuestro Exchange online via web:

IIS Exchange 444

Visual Studio sin Internet Information Server

Al iniciarse en el mundo de la programación de la mano de Visual Studio, los errores iniciales pueden ser sencillos de resolver. En este caso tras una instalación de las herramientas de desarrollo de Microsoft, al crear la más simple de las páginas web, totalmente en blanco obtenemos un error:

System.ArcumentOutOfRangeException: El argumento especificado está fuera del intervalo de valores válidos.

Lo que a primera vista no tiene demasiado sentido para una página en blanco, sin acceso a ningún tipo de array de elementos. Observando más en detenimiento el seguimiento de la pila, podemos encontrar los detalles que nos orientaran en la resolución:

System.Web.HttpRuntime.HostingInit(HostingEnvironmentsFlags hostingFlags, PolicyLevel policyLevel, Exception appDomainCreationException) ... HttpException (0x80004005)

Con lo que podemos intuir que los problemas vienen del entorno local de pruebas del servidor web de Visual Studio. En este caso una de las opciones más sencillas es añadirlo desde las características de nuestro Windows 8, añadiendo el servidor web IIS (Servicios World Wide Web)

IIS en Windows 8.1