Certificados de segurança de diálogo

Quando uma conversação começa, o Agente de Serviços usa associações de serviço remoto para localizar o certificado a fim de usá-lo na conversação. Este tópico descreve como o Agente de Serviços determina o certificado a ser usado para uma conversação.

O Agente de Serviços primeiramente localiza uma associação de serviço remoto para uma conversação e, então, seleciona um certificado de propriedade de um usuário especificado na associação.

Para localizar uma associação, o Agente de Serviços verifica o banco de dados para a associação e especifica o nome do serviço de destino para a conversação.

Para selecionar um certificado, um Agente de Serviços localiza o certificado com a data de validade mais recente de propriedade do usuário especificado na associação de serviço remoto. O Agente de Serviços não considera certificados que ainda não sejam válidos, que tenham expirado ou que não estejam marcados como disponíveis para o início do diálogo. Para obter mais informações sobre certificados, consulte CREATE CERTIFICATE (Transact-SQL).

Se não houver nenhuma associação de serviço remoto ou o usuário da associação de serviço remoto não possuir um certificado válido disponível para iniciar o diálogo, o Agente de Serviços não poder criptografar mensagens para a conversação. Se não houver associação e o banco de dados contiver um Serviço de Configuração do Broker, o Agente de Serviços solicitará uma associação por meio desse serviço. Se não houver um Serviço de Configuração de Broker no banco de dados ou o Serviço de Configuração de Broker não fornecer uma associação de serviço remoto, a conversação será atrasada se a criptografia estiver ON ou continuará sem criptografia se esta estiver OFF. Para obter mais informações, consulte Determinando o tipo de segurança de diálogo.

A segurança de diálogo do Agente de Serviços usa certificados para autorização remota. Quando um diálogo usa segurança de diálogo, a primeira mensagem enviada por cada participante na conversação contém informações de cabeçalho criptografadas com a chave privada do usuário emissor e as informações de cabeçalho criptografadas com a chave pública do usuário receptor. O conteúdo da mensagem é criptografado com uma chave de sessão. A própria chave de sessão é criptografada e só pode ser recuperada usando a chave privada para o usuário receptor.

Se o destinatário da mensagem puder descriptografar a mensagem com sucesso, isso significa que o destinatário possui as chaves correspondentes, confirmando a identidade de cada participante na conversação. Instalar um certificado em um banco de dados cria uma relação de confiança com o banco de dados que contém a chave privada.

De fato, criptografar um cabeçalho com a chave privada para o usuário local levanta uma pergunta: “O banco de dados remoto confia no banco de dados local?” O banco de dados remoto só poderá descriptografar o cabeçalho se o banco de dados contiver a chave pública correspondente. Criptografar um cabeçalho com a chave pública para o usuário no banco de dados local levanta uma pergunta: “O banco de dados local confia no banco de dados remoto?” O banco de dados remoto só poderá descriptografar o cabeçalho se o banco de dados contiver a chave privada correspondente. Para segurança e eficiência, o Agente de Serviços faz ambas as perguntas ao mesmo tempo. Entretanto, a mensagem é estruturada de tal modo que o destinatário deve ser capaz de afirmar ambas as perguntar para responder à mensagem corretamente.

O raciocínio por trás dessa estratégia é simples. Se o banco de dados remoto puder descriptografar um cabeçalho criptografado com a chave privada no banco de dados local, o banco de dados conterá a chave pública correspondente e o banco de dados remoto confiará no banco de dados local. Se o banco de dados remoto puder descriptografar um cabeçalho criptografado com a chave pública no banco de dados local, o banco de dados remoto conterá a chave privada correspondente e o banco de dados local confiará no banco de dados remoto. Desde que as chaves privadas permaneçam secretas, apenas os dois bancos de dados envolvidos na conversação poderão trocar mensagens com sucesso.

ObservaçãoObservação

Instale somente certificados de origens confiáveis. Não distribua chaves privadas.

A segurança de diálogo completa verifica a identidade em ambas as direções durante a primeira troca de mensagens. Para conversações que usam segurança de diálogo anônima, o iniciador verifica se o banco de dados de destino contém a chave privada esperada. Entretanto, com a segurança de diálogo anônima, o banco de dados de destino não verifica a identidade do iniciador; em vez disso, o banco de dados que hospeda o serviço de destino deve permitir que a função de banco de dados fixa pública envie mensagens ao serviço.

As mensagens devem ser trocadas de ambos os modos antes do banco de dados local considerar a identidade do banco de dados remoto confirmada. A verificação só pode ocorrer se o banco de dados local contiver a chave pública correta para o certificado no banco de dados remoto.

Para a primeira mensagem enviada por cada lado da conversação, o Agente de Serviços inclui os seguintes cabeçalhos:

  • Um cabeçalho de segurança de par de serviços contendo informações sobre os certificados usados para a mensagem. O cabeçalho de segurança do par de serviços é assinado com a chave privada para o usuário que possui o serviço.

  • Uma chave de troca de chaves que criptografa a chave de sessão de 128 bits usada para criptografar o corpo da mensagem. A chave de troca de chaves é criptografada com a chave pública para o usuário remoto.

Para diálogos que usam a segurança anônima, o cabeçalho de segurança do par de serviços permanece criptografado. A mensagem em si está ainda criptografada e a chave de troca de chaves está criptografada com a chave pública do principal de segurança no banco de dados de destino. Nesse caso, a primeira mensagem de retorno não contém uma chave de troca de chaves, cabeçalho de segurança de par de serviços ou uma chave de sessão criptografada.

Quando o próprio Agente de Serviços gera uma mensagem em resposta a uma mensagem recebida (por exemplo, de erro ou confirmação), essa mensagem usa a chave de sessão da mensagem recebida, independentemente de se o diálogo usa a segurança completa ou anônima.