AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 213608
Accepted
jyao
jyao
Asked: 2018-07-31 12:27:28 +0800 CST2018-07-31 12:27:28 +0800 CST 2018-07-31 12:27:28 +0800 CST

Habilitar TLS 1.2 para email de banco de dados do SQL Server 2016

  • 772

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.

insira a descrição da imagem 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

insira a descrição da imagem aqui

Os detalhes estão neste link (consulte a seção de perguntas frequentes)

sql-server sql-server-2016
  • 4 4 respostas
  • 34229 Views

4 respostas

  • Voted
  1. Zeek
    2019-03-28T04:18:44+08:002019-03-28T04:18:44+08:00

    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:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
    "SchUseStrongCrypto"=dword:00000001
     
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
    "SchUseStrongCrypto"=dword:00000001
    

    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 *):

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
    "SchUseStrongCrypto"=dword:00000001
     
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
    "SchUseStrongCrypto"=dword:00000001
     
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
     
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000001
     
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000001
    

    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;)

    • 29
  2. Best Answer
    jyao
    2018-08-10T08:04:56+08:002018-08-10T08:04:56+08:00

    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 é:

    Correio de banco de dados SQL Server usa System.Net.Mail para fazer o trabalho, o System.Net.Mail é capaz de enviar emails usando TLS 1.2, mas somente quando a versão de tempo de execução de compilação é 4.6 ou superior. O SQL Server 2016 db mail foi criado para .Net 3.5, portanto, o SQL Server 2016 db mail não oferece suporte a TLS 1.2 a partir de agora.

    • 5
  3. Alberto Martinez
    2018-10-29T13:20:03+08:002018-10-29T13:20:03+08:00

    É estranho porque o artigo vinculado afirma claramente:

    Suporte para TLS v1.2 incluído no .NET Framework versão 3.5 SP1 no Windows 8.1 e Windows Server 2012 R2

    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:

    As configurações corretas do registro são as seguintes:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2] 
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
      "DisabledByDefault"=dword:00000000
      "Enabled"=dword:00000001 
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
      "DisabledByDefault"=dword:00000000
      "Enabled"=dword:00000001  
    

    Essas configurações são necessárias para computadores servidor e cliente.

    Mas na captura de tela que você forneceu, eu só vejo "Enabled"=dword:00000001, a "DisabledByDefault"=dword:00000000chave está faltando.

    Também diz:

    O TLS 1.1 tem suporte no SQL Server 2016?

    Sim. O SQL Server 2016 e o ​​SQL Server 2017 nas versões do Windows são fornecidos com suporte a TLS 1.0 a TLS 1.2. Você precisa desabilitar o TLS 1.0 e 1.1 se quiser usar apenas o TLS 1.2 para comunicação cliente-servidor.

    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.

    • 5
  4. ema
    2021-11-23T13:44:50+08:002021-11-23T13:44:50+08:00
    • Temos um problema semelhante há algumas semanas com o correio de banco de dados SQLServer. Usamos o servidor SMTP do office365 no Azure.

    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.

    • Se analisarmos o cabeçalho do e-mail enviado pelo correio do banco de dados, podemos ver que o servidor SMTP usa TLS1.2, mas o correio do banco de dados enviou o e-mail com o protocolo TLS1.0.
    Microsoft SMTP Server (version=TLS1_2,...)
    Received: from ... with Microsoft SMTP Server (version=TLS1_0, ...
    
    • Corrigimos o problema com a adição da seguinte chave de registro em cada servidor (Powershell Script)
    #TLS1.2 configure strong encryption
    #The strong cryptography uses more secure network protocols (TLS 1.2, TLS 1.1, and TLS 1.0) and blocks protocols that are not secure.
    #64 bits applications
    New-ItemProperty -Path "HKLM:\Software\Microsoft\.NETFramework\v2.0.50727" -Name "SchUseStrongCrypto" -Value ”1”  -PropertyType "dword";
    New-ItemProperty -Path "HKLM:\Software\Microsoft\.NETFramework\v4.0.30319" -Name "SchUseStrongCrypto" -Value ”1”  -PropertyType "dword";
    
    
    #32 bits applications
    New-ItemProperty -Path "HKLM:\Software\WOW6432Node\Microsoft\.NETFramework\v2.0.50727" -Name "SchUseStrongCrypto" -Value ”1”  -PropertyType "dword";
    New-ItemProperty -Path "HKLM:\Software\WOW6432Node\Microsoft\.NETFramework\v4.0.30319" -Name "SchUseStrongCrypto" -Value ”1”  -PropertyType "dword";
    
    
    
    #SystemDefaultTlsVersions
    #A value of 1 causes your app to allow the operating system to choose the protocol
    New-ItemProperty -Path "HKLM:\Software\Microsoft\.NETFramework\v2.0.50727" -Name "SystemDefaultTlsVersions" -Value ”1”  -PropertyType "dword";
    New-ItemProperty -Path "HKLM:\Software\Microsoft\.NETFramework\v4.0.30319" -Name "SystemDefaultTlsVersions" -Value ”1”  -PropertyType "dword";
    
    
    #32 bits applications
    New-ItemProperty -Path "HKLM:\Software\WOW6432Node\Microsoft\.NETFramework\v2.0.50727" -Name "SystemDefaultTlsVersions" -Value ”1”  -PropertyType "dword";
    New-ItemProperty -Path "HKLM:\Software\WOW6432Node\Microsoft\.NETFramework\v4.0.30319" -Name "SystemDefaultTlsVersions" -Value ”1”  -PropertyType "dword"; 
    
    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve