Cómo hacer que Indy OpenSSL sea compatible con la mayoría de los servidores
Utilizo el siguiente código para configurar SSLHandler para la aplicación de envío / recepción POP3 / SMTP:
IdSSLHandler->SSLOptions->Mode = sslmClient;
IdSSLHandler->SSLOptions->Method = slvSSLv23;
IdSSLHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvSSLv3 << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
Por lo tanto, se supone que el código anterior es compatible con SSL 3, TLS 1, TLS 1.1 y TLS 1.2 automáticamente. Esto no funciona bien e informa un error de "versión incorrecta". Cuando elSSLVersions
la línea se elimina y luego funciona, pero por defecto incluyesslvSSLv2
que no quiero apoyar Es lo mismo que:
IdSSLHandler->SSLOptions->Mode = sslmClient;
IdSSLHandler->SSLOptions->Method = slvSSLv23;
IdSSLHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvSSLv2 << sslvSSLv3 << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
Por alguna razón, esto funciona y lo anterior no funciona en el mismo servidor. Yo sé esoslvSSLv23
es una especie de valor de "usar cualquier versión disponible". Entonces, ¿por qué no funciona con el código anterior donde la versión 2 no está presente?
Además, puedo usar TSL1, que parece estar ampliamente implementado, pero si el servidor admite 1.1 o 1.2, entonces mi código no usará versiones más recientes, pero forzará la versión 1.0 a menos que se use algo como el anterior.
Me gustaría hacer una inicialización con los siguientes objetivos:
compatible con todos los servidores, independientemente de si usan v3, tls1, tls1.1 o tls1.2use automáticamente la versión más reciente y use una versión inferior si la más reciente no está disponible en el servidor pero no es inferior a la versión 3 - falla / excepción si la versión es inferior a 3Pensé que la primera versión del código proporcionaría eso, pero informa un error de versión. ¿Son posibles los objetivos anteriores o se debe proporcionar una configuración de usuario para seleccionar la versión SSL a utilizar?