Convalida manuale delle credenziali Schannel

Per impostazione predefinita, Schannel convalida il certificato del server chiamando la funzione WinVerifyTrust ; Tuttavia, se questa funzionalità è stata disabilitata usando il flag di ISC_REQ_MANUAL_CRED_VALIDATION, è necessario convalidare il certificato fornito dal server che sta tentando di stabilire la relativa identità.

Per convalidare manualmente il certificato del server, è prima necessario ottenerlo. Usare la funzione QueryContextAttributes (General) e specificare il valore dell'attributo SECPKG_ATTR_REMOTE_CERT_CONTEXT. Questo attributo restituisce una struttura CERT_CONTEXT con la catena di certificati fornita dal server. Questa catena di certificati contiene il certificato foglia. Viene chiamato certificato foglia perché è l'ultimo certificato nella catena di certificati ed è più lontano dal certificato radice. L'ordinamento dei certificati nel buffer di contesto SSPI non implica alcuna relazione di concatenamento dei certificati.

Usando il certificato foglia è necessario verificare quanto segue:

  • La catena di certificati è completa e la radice è un certificato di un'autorità di certificazione attendibile .the certificate chain is complete and the root is a certificate from a trusted certification authority (CA).
  • L'ora corrente non supera le date di inizio e fine per ognuno dei certificati nella catena di certificati.
  • Nessuno dei certificati nella catena di certificati è stato revocato.
  • La profondità del certificato foglia non è più profonda della profondità massima consentita specificata nell'estensione del certificato. Questo controllo è necessario solo se è stata specificata una profondità.
  • L'utilizzo del certificato è corretto, ad esempio un certificato client non deve essere usato per autenticare un server.
  • Per l'autenticazione server, l'identità del server contenuta nel certificato foglia del server corrisponde al server che il client sta tentando di contattare. In genere, il client corrisponderà ad alcuni elementi nel campo Nome soggetto del certificato all'indirizzo IP o al nome DNS del server.