Pregunta

Estoy intentando configurar un sitio web de IIS para requerir certificados de cliente SSL. El sitio web está configurado tanto en IIS 6 y 7, aunque estoy más interesado en hacer que funcione para 7. He establecido la propiedad requerir certificados de cliente en IIS y funciona bien cuando se accede al sitio a través de un navegador web, sino un Java- cliente basado está teniendo problemas para acceder a él.

Creo que el problema es que IIS no solicita un certificado de cliente durante el saludo inicial SSL. En su lugar, negocia una conexión SSL normal, comprueba para ver si el recurso requiere certificados de cliente, y si lo hace, a continuación, inicia un nuevo protocolo de enlace SSL que solicita un certificado de cliente. IIS hace esto para los sitios de soporte que sólo requieren los certificados de cliente para ciertos recursos. Incluso cuando se especifica el requisito de todo el sitio web, IIS todavía iniciados dos protocolos de enlace SSL. Quiero forzar IIS para solicitar el certificado de cliente en el primer protocolo de enlace SSL, que es de esperar que las cosas funcionen para el cliente. (El cliente está desarrollada por un socio externo y que prácticamente no tienen conocimiento de cómo está configurado y no tienen acceso a su código fuente)

¿Alguien ha tratado este problema en IIS antes?

¿Fue útil?

Solución

Me tomó un tiempo para encontrar esta configuración de la metabase. Estábamos teniendo este mismo problema con el cliente utilizando las nuevas bibliotecas Certicom. Desde el descubrimiento del ataque MITM arround SSL Renegociación, la respuesta en un montón de círculos ha sido la de colgar en las solicitudes renegotitation.

ejecutando el siguiente cmd de \ inetpub \ adminscripts obligará IIS para siempre solicitar un certificado de cliente.

Para IIS 6: conjunto cscript adsutil.vbs \ w3svc \ siteID \ SSLAlwaysNegoClientCert verdadera

(tanto para el sitio web predeterminado, cscript adsutil.vbs set \ w3svc \ 1 \ SSLAlwaysNegoClientCert Verdadero)

Tenga en cuenta que algunos clientes Internet Explorer línea de certificados de cliente cuando se recieves ese paquete wether se necesita o no el certificado de cliente.

Para IIS 7:

Guardar el siguiente texto en un archivo llamado "Enable_SSL_Renegotiate_Workaround.js"

var vdirObj=GetObject("IIS://localhost/W3svc/1"); 
// replace 1 on this line with the number of the web site you wish to configure 

WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert); 
vdirObj.Put("SSLAlwaysNegoClientCert", true); 
vdirObj.SetInfo(); 
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert);

Ejecutar el siguiente comando desde un sistema elevado / administrador del indicador:

cscript.exe enable_ssl_renegotiate_workaround.js

(Jackied del artículo de KB para 977.377)

Otros consejos

Así es como lo hice, en IIS 7.5:

  1. Ejecutar el siguiente comando en un símbolo del sistema de administrador: netsh http show sslcert
  2. Guardar la salida en un archivo de texto. Se verá algo como esto:

    IP:port                 : 0.0.0.0:443
    Certificate Hash        : [a hash value]
    Application ID          : {[a GUID]}
    Certificate Store Name  : MY
    Verify Client Certificate Revocation    : Enabled
    Verify Revocation Using Cached Client Certificate Only    : Disabled
    Usage Check    : Enabled
    Revocation Freshness Time : 0
    URL Retrieval Timeout   : 0
    Ctl Identifier          : (null)
    Ctl Store Name          : (null)
    DS Mapper Usage    : Disabled
    Negotiate Client Certificate    : Disabled
    
  3. Crear un archivo por lotes utilizando esa información:

    netsh http show sslcert
    netsh http delete sslcert ipport=0.0.0.0:443
    netsh http add sslcert ipport=0.0.0.0:443 certhash=[your cert hash from above] appid={[your GUID from above]} certstorename=MY verifyclientcertrevocation=enable VerifyRevocationWithCachedClientCertOnly=disable UsageCheck=Enable clientcertnegotiation=enable
    netsh http show sslcert
    

    (Sí, usted tiene que eliminar y volver a añadir, se puede clientcertnegotiation no sólo alter en el lugar que es por eso que es importante para guardar el hash y GUID, por lo que sabe lo que debe volver a agregar.).

  4. Ejecutar ese archivo por lotes, de verificación de los errores, hecho.

Tenga en cuenta que se aplica esta configuración Por certificado , no por servidor. Así que si utiliza varios CERT, o cambiar / actualizar su certificado, tendrá que hacer esto de nuevo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top