Qualcuno sa come configurare IIS Express per richiedere il certificato client per l'accesso? Sto cercando di eseguire il debug di un'applicazione ASP.NET problematica che utilizza i certificati client per l'autenticazione.
Qualcuno sa come configurare IIS Express per richiedere il certificato client per l'accesso? Sto cercando di eseguire il debug di un'applicazione ASP.NET problematica che utilizza i certificati client per l'autenticazione.
Risposte:
Utilizzare lo strumento Gestione IIS e seguire la documentazione Microsoft Autenticazione mappatura certificati client IIS <iisClientCertificateMappingAuthentication> .
Configurazione di esempio:
<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>
Queste erano le istruzioni fornite da Jason Shavers nel suo blog. (Ma quella pagina non esiste più.) Scott Hanselman parla anche di abilitare SSL su http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . Ma non fa mai riferimento al fatto che il sito richieda certificati client.
Queste sono le istruzioni che ho seguito:
Modifica applicationhost.config (ce ne sono due in MyDocuments \ IISExpress \ config e l'altro in file di programma \ IIS Express \ AppServer per impostazione predefinita, quello utilizzato nel profilo viene utilizzato quando si esegue un progetto su IISExpress in VS 2012 L'altro può essere eseguito utilizzando la riga di comando che è ciò che ho fatto sulla macchina di prova locale.)
<access sslFlags = "None" /> to <access sslFlags = "SslNegotiateCert" />
E l'elemento
<iisClientCertificateMappingAuthentication enabled = "false"> </ iisClientCertificateMappingAuthentication>
per
<iisClientCertificateMappingAuthentication enabled = "true"> </ iisClientCertificateMappingAuthentication>
I due passaggi successivi devono essere entrambi eseguiti in Visual Studio Per impostazione predefinita, quando viene creato un nuovo progetto in VS 2012, viene creato come progetto IIS Express. Un progetto precedente trasferito su VS2012 potrebbe dover effettivamente modificare tale impostazione.
Nella pagina Proprietà progetto nella scheda Web, modifica Usa server per sviluppatori Visual Studio per utilizzare il server Web IIS locale. (Dovrebbe essere presente una casella di controllo in grigio che dice Usa IIS Express se non hai una normale installazione IIS sul tuo computer (che non può essere fatto su questi computer NMCI.) Dovrebbe esserci un URL del progetto che dice qualcosa come http: // Localhost: 62714 / (che dovrebbe essere la stessa porta impostata come "porta specifica" nell'impostazione del server di sviluppo di Visual Studio (se impostata)
Quindi selezionare il Progetto in Esplora soluzioni e andare alla scheda Proprietà. (A volte questo deve essere fatto un paio di volte prima che vengano visualizzate le proprietà.) Questo avrà tre proprietà, SSL Enable che per impostazione predefinita è false, URL SSL che è vuoto con un nuovo progetto e URL che è impostato sull'URL in " progetto URL "nella scheda delle proprietà.
Modificare la proprietà abilitata SSL su true e verrà creato un nuovo URL SSL.
Nel file applicationhost.config sotto l'elemento "" viene creata una nuova voce quando il progetto viene eseguito prima di abilitare SSL. Sarà simile a questo:
<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>
Quando abiliti SSL sul tuo progetto, dovrebbe apparire così:
<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>
(tutte le porte 443xx sono riservate ai progetti SSL).
Ho trovato un blog che spiegava come configurare le richieste di certificati client per IIS Express (ho usato Visual Studio 2017, IISExpress 10.0). Apparentemente la posizione dei applicationhost.config
file è cambiata in Visual Studio 2015 e versioni successive.
Ecco uno schema di ciò che dice:
SSL Enabled
a True
(nota che la SSL URL
proprietà viene popolata)https://localhost:44300
applicationhost.config
: nel 2015 o 2017, il file si trova in [solution directory]\.vs\config\
- nelle versioni precedenti si trova in%UserProfile%\Documents\IISExpress\config\
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
e<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
Request.ClientCertificate
proprietà e dovrebbe essere richiesto quando si apre la pagina nel browser.