Richiedi il certificato client SSL solo per percorsi o controller specifici

Richiedi il certificato client SSL solo per percorsi o controller specifici

Ho cercato di fare la stessa cosa, esattamente con i tuoi stessi requisiti.

Sono giunto alla conclusione che non è possibile. La mia soluzione alternativa è usare 2 WebHostBuilder oggetti - uno per le posizioni che non bisogno di certificati client e uno per quelli che lo fanno . Questo ha lo svantaggio che ogni IWebHost deve ascoltare su una porta diversa, ma dallo scenario che descrivi immagino che non sia un grosso problema.

Lo faccio all'interno dello stesso processo, quindi questa soluzione soddisfa questo requisito.


Ho avuto lo stesso problema con context.Connection.GetClientCertificateAsync(); tornava sempre nullo. Poi ho notato che eseguivo sempre Kestrel tramite IIS Express.

Quindi in Visual Studio dalla barra degli strumenti di Debuger sono passato da IIS Express al mio progetto. Kestrel è stato avviato come applicazione console e sono stato in grado di ottenere il certificato client.

Penso che IIS Express non supporti i certificati client, quindi il certificato è stato sempre ignorato.

Per l'altra parte della domanda; Penso che Kestrel non supporti questa granularità che stai guardando fuori dagli schemi quando usi il HttpsConnectionFilterOptions . Dal codice sorgente Kestrel Connection Filter Options la connessione verrà interrotta se il certificato client è nullo. Forse puoi modificare il codice sorgente per il HttpsConnectionFilterOptions e crea il tuo filtro da esso. Quindi puoi usare il ClientCertificateValidation per specificare il metodo di convalida del certificato personalizzato che consentirà la connessione quando non viene inviato alcun certificato client.

Spero che questo aiuti.