Win2012R2 TLS1.2 Autenticazione reciproca - modifica le specifiche di cifratura dal lato server dopo nessun certificato dal client?

2

Sto testando un'applicazione basata su .net in esecuzione su un server Win2012r2 che fornisce servizi Web basati su http e che si affidano a SChannel di Windows per implementare l'autenticazione reciproca tls1.2 con i client compatibili solo da tls1.2.

L'autenticazione reciproca ha funzionato molto bene (i certificati client sono validati correttamente rispetto all'elenco di emittenti affidabili definiti e attivi nell'archivio certificati del computer locale).

Ieri mi sono imbattuto nel seguente scenario che in qualche modo mi imbarazza: anche se il client presenta una lunghezza del certificato pari a 0, la stretta di mano sembra essere tecnicamente valida e non risulta in un errore di stretta di mano o in un avviso di stretta di mano:

  • (sul lato server) Server Ciao, Certificato, Scambio chiavi server, Richiesta certificato , Server Ciao Fatto;
  • (sul lato client) Certificato, Scambio chiavi client, Specificazione cifrario, Messaggio crittografato di handshake (tuttavia il client di test non fornisce alcun certificato client - lunghezza del certificato del client pari a 0 - durante l'handshake);
  • (sul lato server): modifica specifica cipher , messaggio crittografato di handshake;

Perché il lato server non sta terminando l'handshake (errore o avviso di handshake) dopo aver ricevuto alcun certificato client?

Potrebbe essere solo il modo in cui wireshark sta interpretando / analizzando il processo di handshake?

Questo è qualcosa configurabile / sintonizzabile a livello di canale o può essere regolato solo a livello di applicazione?

    
posta Ottootto 25.02.2017 - 06:15
fonte

1 risposta

1

È pienamente valido che il client risponda a una richiesta di certificato da parte del server con un certificato vuoto. Spetta al server come affrontare questo caso, ad esempio se considererà un certificato client come facoltativo o se è richiesto il certificato.

Non ho familiarità con SChannel ma con OpenSSL puoi impostare SSL_VERIFY_FAIL_IF_NO_PEER_CERT in SSL_CTX_set_verify se vuoi far fallire il server se non viene inviato alcun certificato client se imposti SSL_VERIFY_PEER solo che il certificato client è facoltativo .

SChannel ha probabilmente un meccanismo simile ma è compito dell'applicazione utilizzarlo. Quindi guarda nella configurazione del tuo server HTTP. Nel caso di IIS questo è descritto nella documentazione che dice che puoi configurare i certificati client per essere ignorati, accettati o richiesti dal server.

    
risposta data 25.02.2017 - 07:57
fonte

Leggi altre domande sui tag