Estou intrigado com esse problema há quase 1 semana. Espero que alguém em nossa comunidade tenha experimentado o mesmo problema e já tenha encontrado uma solução.
Então aqui está meu problema:
De acordo com a política da nossa empresa, queremos que o correio do banco de dados possa enviar e-mails pela porta 25 com TLS 1.2 ativado e com TLS 1.0 e TLS 1.1 desativados.
Nosso servidor de email é o Exchange Server 2010, nossas caixas SQL Server 2016 (edições Developer e Enterprise) possuem SO das edições Windows Server 2016 Standard.
Nossa versão do SQL Server é:
select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64)
Dec 22 2017 11:25:00
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
Temos a configuração de correio do banco de dados conforme mostrado aqui.
O problema é sempre que ativamos o SSL
use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;
NÃO PODEMOS enviar email db (não importa se nossa autenticação SMTP é Autenticação do Windows, Autenticação básica ou Autenticação anônima). A mensagem de erro no log de email do db é a seguinte:
Mensagem
O correio não pôde ser enviado aos destinatários devido a uma falha no servidor de correio. (Enviando e-mail usando a conta 2 (2018-07-30T10:52:41). Mensagem de exceção: não é possível enviar e-mails para o servidor de e-mail. (Falha ao enviar e-mail.). )
Mas se desligarmos este SSL, não há problema para o envio de e-mail db.
Então, como podemos habilitar o SSL e usar o TLS 1.2 para db mail?
Eu habilitei o TLS 1.2 adicionando o registro conforme mostrado abaixo
Os detalhes estão neste link (consulte a seção de perguntas frequentes)
O TLS1.2 é a única versão do TLS considerada segura agora (março de 2019). Levou tempo e esforço consideráveis para descobrir que existem 2 configurações adicionais essenciais que são necessárias para que isso funcione e que não são bem conhecidas nem bem documentadas, pela Microsoft ou na web em geral. O seguinte pode poupar muito tempo e esforço .
Estas são as 2 novas configurações do Registro que corrigiram o problema para nós:
Esta é uma referência ao encadeamento onde eventualmente encontramos essas informações, enterradas no meio do encadeamento: TLS 1.2 no .NET Framework 4.0
Abaixo está o conteúdo de um arquivo de registro executável simples que montei que fará as 2 novas configurações e as configurações já mostradas no tópico acima (ou seja, isso faz todas as configurações de registro necessárias *):
Nota 1: O SQL precisa ser reiniciado para que essas configurações tenham efeito, mas é melhor reiniciar o Windows , pois as novas configurações afetarão o .NET 4.x em geral.
Nota 2: No SQL, a caixa de seleção SSL deve ser marcada no perfil de correio para usar o TLS1.2.
*Nota 3: FYI Executamos a ferramenta gratuita, Crypto V2, com a opção "Melhores práticas" habilitada antes de começar a fazer isso funcionar. Verificamos nossas alterações posteriormente usando a nova versão 3 do Crypto.
Espero que isso economize tempo, esforço e frustração consideráveis para os outros;)
Como parece que ninguém pode responder a essa pergunta, abri um caso de suporte com a Microsoft e ainda demorou quase 1 semana para o suporte da MS retornar com uma resposta, pois ele passou por vários recursos internos para obter a resposta definitiva.
O resumo é:
É estranho porque o artigo vinculado afirma claramente:
o que contradiz a resposta que você recebe do suporte da MS. Editar: Encontrei nesta pergunta do StackOverflow que, embora o .NET 3.5 não incluísse suporte para TLS 1.2 no início, ele foi adicionado posteriormente pelo MS:
Suporte para versões padrão do sistema TLS incluídas no .NET Framework 3.5.1 no Windows 7 SP1 e Server 2008 R2 SP1
Lendo a seção de perguntas frequentes, acho que o problema é que você perdeu uma chave de registro ao ativar o TLS 1.2. A seção de perguntas frequentes diz:
Mas na captura de tela que você forneceu, eu só vejo
"Enabled"=dword:00000001
, a"DisabledByDefault"=dword:00000000
chave está faltando.Também diz:
que pode ser interpretado como que você precisa desabilitar o TLS 1.0 e 1.1 para usar o 1.2, mas não tenho certeza sobre este.
A configuração era "Windows 2012R2 + SQLServer 2012" e "Windows 2012R2 + SQLServer 2014".
O erro no correio do banco de dados era "A mensagem não pôde ser enviada aos destinatários devido a um erro no servidor de e-mail".
O erro não foi sistemático. Supomos que, quando atingimos um ponto final do Azure que permite TLS1.0, o email é bem enviado, mas quando chegamos a um ponto final usando TLS1.2, nosso email é rejeitado.