¿Alguien sabe cómo configurar IIS Express para requerir un certificado de cliente para el acceso? Estoy tratando de depurar una aplicación ASP.NET problemática que utiliza certificados de cliente para la autenticación.
¿Alguien sabe cómo configurar IIS Express para requerir un certificado de cliente para el acceso? Estoy tratando de depurar una aplicación ASP.NET problemática que utiliza certificados de cliente para la autenticación.
Respuestas:
Use la herramienta Administrador de IIS y siga la documentación de Microsoft Autenticación de asignación de certificado de cliente IIS <iisClientCertificateMappingAuthentication> .
Configuración de muestra:
<location path="Default Web Site">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true"
manyToOneCertificateMappingsEnabled="true">
<manyToOneMappings>
<add name="Contoso Employees"
enabled="true"
permissionMode="Allow"
userName="Username"
password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]">
<rules>
<add certificateField="Subject"
certificateSubField="O"
matchCriteria="Contoso"
compareCaseSensitive="true" />
</rules>
</add>
</manyToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
<access sslFlags="Ssl, SslNegotiateCert" />
</security>
</system.webServer>
</location>
Estas fueron las instrucciones entregadas por Jason Shavers en su blog. (Pero esa página ya no existe). Scott Hanselman también habla sobre habilitar SSL en http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . Pero en ningún momento se refiere a hacer que el sitio requiera certificados de cliente.
Estas son las instrucciones que seguí:
Cambie applicationhost.config (hay dos de estos en MyDocuments \ IISExpress \ config y el otro en los archivos de programa \ IIS Express \ AppServer por defecto, el que está debajo de su perfil se usa cuando ejecuta un proyecto en IISExpress en VS 2012 El otro puede se ejecute usando la línea de comando que es lo que hice en la máquina de prueba local).
<access sslFlags = "Ninguno" /> a <access sslFlags = "SslNegotiateCert" />
Y el elemento
<iisClientCertificateMappingAuthentication enabled = "false"> </ iisClientCertificateMappingAuthentication>
a
<iisClientCertificateMappingAuthentication enabled = "true"> </ iisClientCertificateMappingAuthentication>
Los dos pasos siguientes deben realizarse en Visual Studio. De manera predeterminada, cuando se crea un nuevo proyecto en VS 2012, se crea como un proyecto IIS Express. Un proyecto anterior transferido a VS2012 puede tener que cambiar esa configuración.
En la página de propiedades del proyecto en la pestaña Web, cambie Usar Visual Studio Developer Server para usar el servidor web local IIS. (Debe haber una casilla de verificación en gris que diga Usar IIS Express si no tiene una instalación regular de IIS en su máquina (lo que no se puede hacer en estas máquinas NMCI). Debería haber una URL del proyecto que diga algo como http: // Localhost: 62714 / (que debe ser el mismo puerto configurado como "puerto específico" en la configuración del Servidor de desarrollo de Visual Studio (si está configurado)
Luego seleccione el Proyecto en el explorador de soluciones y vaya a la pestaña de propiedades. (A veces, esto se debe hacer un par de veces antes de que se muestren las propiedades). Esto tendrá tres propiedades, SSL Enable, que por defecto es falso, SSL URL que está en blanco con un nuevo proyecto y URL que se establece en la URL en " URL del proyecto "en la pestaña de propiedades.
Cambie la propiedad habilitada para SSL a verdadero y se creará una nueva URL SSL.
En el archivo applicationhost.config debajo del elemento "" se crea una nueva entrada cuando el proyecto se ejecuta por primera vez antes de habilitar SSL. Se verá así:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
</bindings>
</site>
Cuando habilita SSL en su proyecto, debería verse así:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
<binding protocol="https" bindingInformation="*:44313:localhost" />
</bindings>
</site>
(todos los puertos 443xx están reservados para proyectos SSL).
Encontré un blog que detallaba cómo configurar las solicitudes de certificados de cliente para IIS Express (utilicé Visual Studio 2017, IISExpress 10.0). Aparentemente, la ubicación de los applicationhost.config
archivos cambió en Visual Studio 2015 y versiones posteriores.
Aquí hay un resumen de lo que dice:
SSL Enabled
para True
(observe que la SSL URL
propiedad se llena)https://localhost:44300
applicationhost.config
: en 2015 o 2017, el archivo se encuentra en [solution directory]\.vs\config\
- en versiones anteriores se encuentra en%UserProfile%\Documents\IISExpress\config\
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
y<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
Request.ClientCertificate
propiedad, y se le debe solicitar cuando abra su página en el navegador.