Como tornar o Indy OpenSSL compatível com a maioria dos servidores
Eu uso o código a seguir para configurar o SSLHandler para o aplicativo de envio / recebimento de POP3 / SMTP:
IdSSLHandler->SSLOptions->Mode = sslmClient;
IdSSLHandler->SSLOptions->Method = slvSSLv23;
IdSSLHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvSSLv3 << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
Portanto, o código acima deve suportar SSL 3, TLS 1, TLS 1.1 e TLS 1.2 automaticamente. Isso não funciona bem e relata o erro "versão incorreta". Quando oSSLVersions
linha é removida e funciona, mas por padrão incluisslvSSLv2
que eu não quero apoiar. É o mesmo que:
IdSSLHandler->SSLOptions->Mode = sslmClient;
IdSSLHandler->SSLOptions->Method = slvSSLv23;
IdSSLHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvSSLv2 << sslvSSLv3 << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
Por algum motivo, isso funciona e o acima não funciona no mesmo servidor. Eu sei dissoslvSSLv23
é um tipo de valor "use qualquer versão disponível". Então, por que não funciona com o código acima, onde a versão 2 não está presente?
Além disso, posso usar o TSL1, que parece ser amplamente implantado, mas se o servidor suportar 1.1 ou 1.2, meu código não usará versões mais recentes, mas forçará a versão 1.0, a menos que algo como o acima seja usado.
Eu gostaria de fazer uma inicialização com os seguintes objetivos:
compatível com todos os servidores, independentemente de usarem v3, tls1, tls1.1 ou tls1.2use automaticamente a versão mais recente e use a versão mais baixa se mais recente não estiver disponível no servidor, mas não for inferior à versão 3 - falha / exceção se a versão for inferior a 3Eu pensei que a primeira versão do código iria fornecer isso, mas relata erro de versão. Os objetivos acima são possíveis ou é necessário fornecer uma configuração do usuário para selecionar a versão SSL a ser usada?