Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli argomenti di questa sezione includono esempi di codice che illustrano come eseguire l'autenticazione reciproca con un servizio che pubblica se stesso usando un punto di connessione del servizio (SCP). Gli esempi sono basati su un servizio Microsoft Windows Sockets che usa un pacchetto SSPI per gestire la negoziazione di autenticazione reciproca tra un client e il servizio. Utilizzare le procedure seguenti per implementare l'autenticazione reciproca in questo scenario.
Per registrare i nomi SPN in una directory quando viene installato un servizio
- Chiamare la funzione DsGetSpn per comporre i nomi delle entità servizio (SPN) per il servizio.
- Chiamare la funzione DsWriteAccountSpn per registrare i nomi SPN nell'account del servizio o nell'account computer nel cui contesto verrà eseguito il servizio. Questo passaggio deve essere eseguito da un amministratore di dominio; un'eccezione è che un servizio in esecuzione con l'account LocalSystem può registrare il nome SPN nel formato "<classe>/<host> del servizio" nell'account computer dell'host del servizio.
Per verificare la configurazione all'avvio del servizio
- Verificare che i nomi SPN appropriati siano registrati nell'account in cui è in esecuzione il servizio. Per altre informazioni, vedere Attività di manutenzione account di login.
Per autenticare il servizio all'avvio del client
- Recuperare i dati di connessione dal punto di connessione del servizio del servizio.
- Stabilire una connessione al servizio.
- Chiamare la funzione DsMakeSpn per comporre un nome SPN per il servizio. Comporre il nome SPN dalla stringa della classe del servizio nota e i dati recuperati dal punto di connessione del servizio. Questi dati includono il nome host del server in cui è in esecuzione il servizio. Tenere presente che il nome host deve essere un nome DNS.
- Usare un pacchetto di sicurezza SSPI per eseguire l'autenticazione:
- Chiamare la funzione AcquireCredentialsHandle per acquisire le credenziali del client.
- Passare le credenziali client e il nome SPN alla funzione InitializeSecurityContext per generare un BLOB di sicurezza da inviare al servizio per l'autenticazione. Impostare il flag ISC_REQ_MUTUAL_AUTH per richiedere l'autenticazione reciproca.
- I BLOB di Exchange con il servizio fino al completamento dell'autenticazione.
- Verificare la maschera delle funzionalità restituite per il flag ISC_REQ_MUTUAL_AUTH per verificare che sia stata eseguita l'autenticazione reciproca.
- Se l'autenticazione ha avuto esito positivo, scambiare traffico con il servizio autenticato. Usare la firma digitale per assicurarsi che i messaggi tra client e servizio non siano stati manomessi. A meno che i requisiti di prestazioni non siano gravi, usare la crittografia. Per altre informazioni e un esempio di codice che illustra come usare le funzioni MakeSignature, VerifySignature, EncryptMessage e DecryptMessage in un pacchetto SSPI, vedere Garantire l'integrità della comunicazione durante Lo scambio di messaggi.
Per autenticare il client dal servizio quando un client si connette
- Caricare un pacchetto di sicurezza SSPI che supporta l'autenticazione reciproca.
- Quando un client si connette, usare il pacchetto di sicurezza per eseguire l'autenticazione:
- Chiamare la funzione AcquireCredentialsHandle per acquisire le credenziali del servizio.
- Passare le credenziali del servizio e il BLOB di sicurezza ricevuti dal client alla funzione AcceptSecurityContext per generare un BLOB di sicurezza da inviare al client.
- Scambiare BLOB con il client fino al completamento dell'autenticazione.
- Controllare la maschera delle funzionalità restituite per il flag ASC_RET_MUTUAL_AUTH per verificare che sia stata eseguita l'autenticazione reciproca.
- Se l'autenticazione ha avuto esito positivo, scambiare traffico con il client autenticato. Usare la firma digitale e la crittografia a meno che le prestazioni non siano un problema.
Per altre informazioni e un esempio di codice per questo scenario di autenticazione reciproca, vedere:
- Come un client autentica un servizio Windows Sockets basato su SCP
- Composizione e registrazione di nomi SPN per un servizio Windows Sockets basato su SCP
- Come un servizio Windows Sockets autentica un client
Per altre informazioni, vedere:
- La pubblicazione tramite punti di connessione del servizio
- documentazione SSPI
- Documentazione di Windows Sockets