Certificati per la protezione del dialogo

Quando si avvia una conversazione, Service Broker utilizza le associazioni ai servizi remoti per individuare il certificato da utilizzare. In questo argomento viene illustrata la determinazione del certificato da utilizzare per una conversazione da parte di Service Broker.

Service Broker individua innanzitutto l'associazione al servizio remoto per la conversazione e quindi seleziona un certificato di proprietà dell'utente specificato nell'associazione.

Per trovare l'associazione, Service Broker cerca nel database un'associazione in cui sia specificato il nome del servizio di destinazione della conversazione.

Per selezionare un certificato, Service Broker cerca il certificato con la data di scadenza più remota di proprietà dell'utente specificato nell'associazione al servizio remoto. Service Broker non considera i certificati non più validi, scaduti o non contrassegnati come disponibili per l'inizio del dialogo. Per ulteriori informazioni sui certificati, vedere CREATE CERTIFICATE (Transact-SQL).

Se non esiste alcuna associazione al servizio remoto o se l'utente di tale associazione non è proprietario di un certificato valido disponibile per l'inizio del dialogo, Service Broker non è in grado di crittografare i messaggi per la conversazione. Se non è disponibile alcuna associazione e nel database è presente un servizio di configurazione di Service Broker, Service Broker richiede un'associazione tramite questo servizio. Se nel database non è presente un servizio di configurazione di Service Broker o se tale servizio non è in grado di fornire l'associazione al servizio remoto, la conversazione viene ritardata se la crittografia è impostata su ON oppure continua senza crittografia se la crittografia è impostata su OFF. Per ulteriori informazioni, vedere Determinazione del tipo di protezione del dialogo.

La protezione del dialogo di Service Broker utilizza i certificati per l'autorizzazione remota. Quando un dialogo utilizza la protezione del dialogo, il primo messaggio inviato da ogni partecipante alla conversazione contiene informazioni di intestazione crittografate con la chiave privata del mittente e informazioni di intestazione crittografate con la chiave pubblica del destinatario. Il contenuto del messaggio viene crittografato con una chiave della sessione, che è anch'essa crittografata e può essere recuperata solo utilizzando la chiave privata del destinatario.

Se il destinatario è in grado di decrittografare il messaggio, significa che possiede le chiavi corrispondenti. È quindi confermata l'identità di ogni partecipante alla conversazione. L'installazione di un certificato in un database crea una relazione di trust con il database che contiene la chiave privata.

In effetti, la crittografia di un'intestazione con la chiave privata dell'utente locale presuppone la verifica dell'esistenza di una relazione di trust dal database remoto al database locale. Il database remoto può decrittografare l'intestazione solo se contiene la chiave pubblica corrispondente. La crittografia di un'intestazione con la chiave pubblica per un utente nel database remoto presuppone la verifica dell'esistenza di una relazione di trust dal database locale al database remoto. Il database remoto può decrittografare l'intestazione solo se contiene la chiave privata corrispondente. Ai fini della protezione e dell'efficienza Service Broker esegue queste verifiche contemporaneamente. Il messaggio, tuttavia, viene strutturato in modo tale che entrambe le verifiche devono avere esito positivo perché il destinatario sia in grado di rispondere correttamente al messaggio.

I concetti di base di questa strategia sono semplici. Se il database remoto è in grado di decrittografare un'intestazione crittografata con una chiave privata nel database locale, significa che contiene la chiave pubblica corrispondente e che esiste una relazione di trust dal database remoto al database locale. Se il database remoto è in grado di decrittografare un'intestazione crittografata con una chiave pubblica nel database locale, significa che contiene la chiave privata corrispondente e che esiste una relazione di trust dal database locale al database remoto. A condizione che le chiavi private vengano mantenute segrete, solo i due database coinvolti nella conversazione sono in grado di scambiare messaggi.

[!NOTA] Installare i certificati solo da fonti attendibili. Evitare di distribuire chiavi private.

La protezione avanzata del dialogo verifica l'identità in entrambe le direzioni durante il primo scambio di messaggi. Per le conversazioni che utilizzano la protezione anonima del dialogo, l'initiator verifica che nel database di destinazione sia presente la chiave privata prevista. Con la protezione anonima del dialogo, tuttavia, il database di destinazione non verifica l'identità dell'initiator ma è il database che ospita il servizio di destinazione a dover consentire al ruolo predefinito del database public l'invio di messaggi al servizio.

Prima che il database locale consideri valida l'identità del database remoto, è necessario lo scambio di messaggi in entrambe le direzioni. La verifica può essere eseguita solo se il database locale contiene la chiave pubblica corretta per il certificato presente nel database remoto.

Nel primo messaggio inviato da ogni lato della conversazione, Service Broker include le intestazioni seguenti:

  • Un'intestazione di protezione della coppia del servizio contenente informazioni sui certificati utilizzati per il messaggio, che viene firmata con la chiave privata per l'utente proprietario del servizio.
  • Una chiave per lo scambio delle chiavi che crittografa la chiave della sessione a 128 bit utilizzata per crittografare il corpo del messaggio. La chiave per lo scambio delle chiavi viene crittografata con la chiave pubblica per l'utente remoto.

Per i dialoghi che utilizzano la protezione anonima, l'intestazione di protezione della coppia del servizio non viene crittografata. Il messaggio stesso rimane crittografato e la chiave per lo scambio delle chiavi viene crittografata con la chiave pubblica per l'entità di protezione nel database di destinazione. In questo caso il primo messaggio restituito non contiene la chiave per lo scambio delle chiavi, l'intestazione di protezione della coppia del servizio o la chiave della sessione crittografata.

Quando Service Broker genera un messaggio in risposta a un messaggio in arrivo, ad esempio un errore o un acknowledgement, utilizza la chiave della sessione del messaggio in arrivo, indipendentemente dall'utilizzo della protezione avanzata o anonima del dialogo.

Vedere anche

Concetti

Certificati e Service Broker
Associazioni ai servizi remoti

Altre risorse

CREATE REMOTE SERVICE BINDING (Transact-SQL)
ALTER REMOTE SERVICE BINDING (Transact-SQL)
DROP REMOTE SERVICE BINDING (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005