Alguém sabe como forçar um aplicativo usando .NET 4.7 para usar TLS 1.2 para uma solicitação https segura?
Eu sei que o cliente suporta TLS 1.2, pois posso acessar o URL https de destino bem com o Chrome. Mas o aplicativo .NET, usando uma biblioteca da Microsoft para conversar com um hub de notificação do Azure, está negociando para usar o TLS 1.0, que o servidor do Azure parou de oferecer no final de 2020. O rastreamento de pacotes mostra que imediatamente após o "cliente Hello" ser enviado , especificando TLS 1.0, o servidor do Azure fecha imediatamente o soquete.
Eu segui as instruções aqui: https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default- protocolos-seguros-in-wi
e aqui:
2008 R2 TLS 1.2 habilitado no registro, reinicializado, mas não funcionando
Então eu tenho o SCHANNEL habilitando TLS 1.1 e TLS 1.2 para Cliente e Servidor
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
e
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp está definido para ter TLS 1.1 e 1.2 com um novo DWORD DefaultSecureProtocols definido como 0x0A00.
Ainda assim, o código do Azure que estou executando gera uma exceção em System.Net.HttpWebRequest. O Wireshark mostra que está tentando se conectar com o TLS 1.0.
Lex Li deixou um comentário acima que me levou à resposta à minha pergunta. Aqui está o que eu fiz para corrigir o problema.
Leia a fonte dessas informações para obter mais detalhes: https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
A "correção" é fazer duas coisas, e estas são realizadas atualizando o registro. Primeiro, adicione as configurações do registro para garantir que o TLS 1.1 e o TLS 1.2 estejam habilitados, curiosamente, criando as chaves apropriadas e um valor DWORD para "DisabledByDefault" e definindo como zero. Aparentemente, se as chaves apropriadas e o "DisabledByDefault" não existirem, elas serão "desativadas por padrão".
Aqui estão as configurações do REG para ativar esses dois protocolos TLS por padrão:
Portanto, agora que o sistema operacional permitirá esses protocolos por padrão, a próxima etapa é configurar o .NET para usar essas configurações do sistema operacional por padrão. Fazemos isso para aplicativos de 64 e 32 bits. As configurações do registro para isso são as seguintes: