Tenho o SqlServer legado ao qual tento me conectar, mas a conexão falha devido a um erro de handshake TLS. Depois de analisar o tráfego com o Wireshark, parece que encontrei o motivo: o certificado é assinado usando o Algorithm Id: 1.2.840.113549.1.1.5
( sha1WithRSAEncryption
). Portanto, se o cliente indicar rsa_pkcs1_sha1 (0x0201)
suporte (usando signature_algorithms
a extensão no Client Hello), o servidor responderá corretamente (foi testado no Windows), caso contrário, o servidor apenas fechará a conexão imediatamente. Porém não consegui habilitá-lo usando o openssl 3.
Versão TLS: 1.2
O que eu tentei:
- Definir SECLEVEL=0 (
CipherString = ALL@SECLEVEL=0
) - Adicionado CypherSuites que foi aceito em teste de conexão bem-sucedido (como
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c))
- Garantido que o provedor legado esteja carregado e ativo (usando
openssl list -providers
) - Algoritmo desejado explicitamente adicionado em SignatureAlgorithms. Mas não tenho certeza se fiz isso corretamente. Assim:
SignatureAlgorithms = RSA+SHA1:ecdsa_sha1:rsa_pkcs1_sha1:...
config_diagnostics = 1
- Garantido que RSA e SHA1 possam ser usados em contextos diferentes (
openssl dgst -sha1 ./file.txt
,openssl genrsa
)
Ainda assim, tudo relacionado ao SHA1 é ignorado da extensão subscription_algorithms quando o handshake TLS é iniciado e, portanto, a conexão é fechada pelo servidor.
Além disso, por algum motivo, openssl list -digest-algorithms
é impresso sha1WithRSAEncryption => SHA1
em Legacy
seção, não em Provided
seção. Não está claro para mim nos documentos o que essas seções significam
versão do openssl : 3.2.2
PS Por favor, tenha em mente que não sou competente em CypherSuites, algoritmos de assinatura e assim por diante e como isso afeta uns aos outros. Apenas tentando se conectar ao servidor.
PS 2. POR FAVOR, não me diga que SHA1 é inseguro e preciso atualizar o certificado em um servidor que não possuo.