Estoy tratando de configurar IIS 8 (Windows Server 2012) para aceptar certificados de cliente para un asegurado WebAPI extremo. Siguiente este post he creado un certificado autofirmado y un certificado de cliente:

makecert.exe -r -n "CN=MyCompany" -pe -sv MyCompany.pvk -a sha1 -len 2048 -cy authority MyCompany.cer

makecert.exe -iv MyCompany.pvk -ic MyCompany.cer -n "CN=MY Client" -pe -sv MyClient.pvk -a sha1 -len 2048 -sky exchange MyClient.cer -eku 1.3.6.1.5.5.7.3.2

pvk2pfx.exe -pvk MyClient.pvk -spc MyClient.cer -pfx MyClient.pfx -po THE_PASSWORD

He instalado el certificado raíz de MyCompany.cer en el servidor IIS, luego en el Administrador de IIS/Configuración de SSL he seleccionado la opción de «Aceptar» botón de radio para permitir que el sitio web aceptan certificados de cliente.

En el lado del cliente de una C# prueba de aplicación de consola que carga el cliente cert Micliente.archivo pfx y llama a la WebAPI extremo:

var certHandler = new WebRequestHandler();
certHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
certHandler.UseProxy = false;
var certificate = new X509Certificate2(File.ReadAllBytes(@"C:\MyClient.pfx"), "THE_PASSWORD");
certHandler.ClientCertificates.Add(certificate);
var client = new HttpClient(certHandler);
var result = client.GetAsync("https://MyServer/api/MyEndpoint").Result;
string resultStr = result.Content.ReadAsStringAsync().Result;
Console.WriteLine(resultStr);

Estoy recibiendo un error 403:

403 - Forbidden: Access is denied.
You do not have permission to view this directory or page using the credentials that you supplied.

He probado el mismo programa de instalación en mi local de IIS (Windows 7): Importada en el MyCompany.cer archivo de configuración de SSL en IIS. Esta vez todo funciona bien y la WebAPI extremo puede ver el certificado de cliente con ningún problema.

Alguna idea?

— Update 1

He habilitado el Seguimiento de solicitudes con Error en IIS y me sale esto:

<failedRequest url="https://myserver:443/"
           siteId="35"
           appPoolId="CertTest"
           processId="7248"
           verb="GET"
           authenticationType="NOT_AVAILABLE"               activityId="{00000000-0000-0000-B0AA-0280000000E0}"
           failureReason="STATUS_CODE"
           statusCode="403.16"
           triggerStatusCode="403.16"
           timeTaken="0"
           xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
           >

Si entiendo a la derecha el error es 403.16. Entiendo que sucede cuando el certificado en el servidor no se importa en las entidades emisoras Raíz de Confianza en el Equipo Local. He vuelto a revisar y que no es mi caso.

InformationsquelleAutor oscarmorasu | 2014-05-31

2 Comentarios

  1. 4

    Comprobar que

    • En el IIS máquina que tiene instalado el Servidor de certificados del emisor de certificados de entidades emisoras Raíz de Confianza en el Equipo Local
    • En el IIS máquina que tiene instalado el Cliente de certificados del emisor de certificados de entidades emisoras Raíz de Confianza en el Equipo Local
    • En el equipo cliente que tiene instalado el Servidor de certificados del emisor del certificado Raíz de Confianza de las Autoridades de Certificación en virtud de Usuario de Windows que se ejecuta la consola de la aplicación
    • En el equipo cliente que tiene instalado el Cliente de certificados del emisor del certificado Raíz de Confianza de las Autoridades de Certificación en virtud de Usuario de Windows que se ejecuta la consola de la aplicación. O usted puede hacer para asegurarse de incluir todas las medidas necesarias certificado de la cadena de archivo pfx
    • En el uso de código X509Certificate2 del cto r de la versión con X509KeyStorageFlags.UserKeySet explícitamente.

    Si no te va a ayudar,

    1. intentar abrir url en IE (bajo la misma Cuenta de Usuario de Windows que se ejecuta la consola de la aplicación).
    2. abierto *.cer archivos con hacer doble clic en un cliente de la máquina bajo la Cuenta de Usuario de Windows que se ejecuta la consola de la aplicación y ver lo que Windows dice acerca de la validez.
    3. cambio de IIS configuración de SSL para ignorar certificado de cliente para ver si está todo bien con certificado de servidor. Trate de navegador y aplicación de consola.
  2. 0

    Echar un vistazo a la siguiente entrada del blog: https://configmgrblog.com/2014/02/23/configmgr-2012-r2-internet-facing-mp-windows-server-2012-r2-note/

    En resumen: No parece ser un problema con la autenticación de certificado de cliente y 8 de IIS.x en Windows Server 2012 (R2), que podrían causar código de estado 403.16 para ser devueltos al utilizar certificados de cliente. Solución:

    Conjunto de entradas DWORD del registro bajo HKey_Local_Machine\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL en el servidor:

    SendTrustedIssuerList = 0
    ClientAuthTrustMode = 2
    

    El post menciona además que si obtienes un 403.13 (cliente certificado revocado) después de arreglar el problema inicial (403.16), debe deshabilitar el cliente comprobación de revocación de certificados en el servidor. Yo no recomendaría que. Por favor, asegúrese de que el CDP está correctamente configurado en el certificado de cliente. El CDP tiene que ser accesible desde el servidor y la lista de revocación debe ser válido y no está pasada de moda.

Dejar respuesta

Please enter your comment!
Please enter your name here