transferir servidor instalar crear convertir como certificado openssl indy indy10

openssl - servidor - instalar certificado.cer en linux



Cómo hacer que Indy OpenSSL sea compatible con la mayoría de los servidores (1)

Utilizo el siguiente código para configurar SSLHandler para la aplicación de envío / recepción de 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 el error de "versión incorrecta". Cuando se SSLVersions línea SSLVersions , funciona, pero de forma predeterminada incluye sslvSSLv2 que no quiero admitir. Es lo mismo como:

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 está en el mismo servidor. Sé que slvSSLv23 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.2
  • utilice automáticamente la versión más reciente y use una versión más baja si la más reciente no está disponible en el servidor pero no es inferior a la versión 3: error / excepción si la versión es inferior a 3

Pensé que la primera versión del código proporcionaría eso, pero informa el error de versión. ¿Son posibles los objetivos anteriores o se debe proporcionar una configuración de usuario para seleccionar la versión SSL que se utilizará?


Al configurar SSLVersions en un único valor, el Method se establece automáticamente en la versión individual correspondiente. Establecer SSLVersions en varios valores establece automáticamente el Method en slvSSLv23 .

Establecer el Method en una única versión establece automáticamente SSLVersions en el valor único correspondiente. Establecer el Method en slvSSLv23 establece automáticamente SSLVersions a todos los valores admitidos.

Indy activa / desactiva los indicadores apropiados SSL_OP_NO_SSL_v# y SSL_OP_NO_TLS_v# en OpenSSL, según los valores de Method y SSLVersions .

Sugeriría el siguiente enfoque, que es un poco más a prueba de futuro a medida que se agregan nuevas versiones de TLS:

IdSSLHandler->SSLOptions->Method = sslvSSLv23; IdSSLHandler->SSLOptions->SSLVersions = IdSSLHandler->SSLOptions->SSLVersions >> sslvSSLv2;

De cualquier forma, Indy usaría SSLv23 con solo el indicador SSL_OP_NO_SSL_v2 activado.

En esa configuración, un error de "versión incorrecta" normalmente significa que el servidor está utilizando una versión específica que no admite la negociación de la versión (que utiliza un cliente helio compatible con SSLv2). En otras palabras, un cliente SSLv23 que se conecta a un servidor TLSv1 fallará. El servidor debe usar SSLv23 para admitir la negociación de la versión. El uso de SSLv23 en el servidor le permite aceptar cualquier versión de cliente, ya que el cliente inicia el intercambio de información para que el servidor pueda ver qué encabezado de versión se está utilizando. Pero el uso de SSLv23 en el cliente NO le permite conectarse a ningún servidor QUE NO sea un servidor SSLv23. Un servidor SSLv2 solo puede aceptar clientes SSLv2, un servidor SSLv3 solo puede aceptar clientes SSLv3, un servidor TLSv1 solo puede aceptar clientes TLSv1, y así sucesivamente.

Para conectarse realmente a "cualquier" servidor, debería detectar un error de "versión incorrecta" y volver a intentar con una configuración específica de Method / SSLVersions . Lamentablemente, la respuesta de "versión incorrecta" no incluye la versión real del servidor, por lo que debe usar prueba y error. Si SSLv23 falla, intente con TLSv1_2. Si eso falla, prueba TLSv1_1. Si eso falla, pruebe TLSv1. Si eso falla, pruebe con SSLv3.