Desde que nuestro proveedor de correo electrónico cambió su certificado SSL, un cliente POP3 basado en mono se niega a conectarse a su servidor POP seguro para descargar correos electrónicos. Otros clientes no tienen un problema; por ejemplo, Thunderbird y Outlook; tampoco lo hacen la mayoría de los sitios de verificación SSL que son capaces de verificar puertos impares, excepto este . He estado trabajando con ambos proveedores en un intento por identificar el problema, pero finalmente he llegado a un punto muerto con ambos, ya que no sé lo suficiente sobre los Certificados SSL para poder guiar a cualquiera de los proveedores a comprender dónde está la falla.
Durante la investigación, me llamó la atención la diferencia en la salida de los siguientes dos comandos (he eliminado los certificados de la salida para facilitar la lectura):
echo "" | openssl s_client -showcerts -connect pop.gmail.com:995
CONECTADO (00000003) profundidad = 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CAerror de verificación : num = 20: no se puede obtener el certificado de emisor local verificar devolución: 0 --- Cadena de certificados 0 s: / C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com i: / C = US / O = Google Inc / CN = Autoridad de Internet de Google G2 ----- COMIENCE EL CERTIFICADO ----- ----- FINALIZAR CERTIFICADO ----- 1 s: / C = US / O = Google Inc / CN = Google Internet Authority G2 i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- COMIENCE EL CERTIFICADO ----- ----- FINALIZAR CERTIFICADO ----- 2 s: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA i: / C = US / O = Equifax / OU = Equifax Secure Certificate Authority ----- COMIENCE EL CERTIFICADO ----- ----- FINALIZAR CERTIFICADO ----- --- Certificado del servidor subject = / C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com emisor = / C = US / O = Google Inc / CN = Autoridad de Internet de Google G2 --- No se enviaron nombres de CA de certificado de cliente --- El protocolo de enlace SSL ha leído 3236 bytes y escrito 435 bytes --- Nuevo, TLSv1 / SSLv3, Cipher es RC4-SHA La clave pública del servidor es de 2048 bits La renegociación segura es compatible Compresión: NINGUNO Expansión: NINGUNO Sesión SSL: Protocolo: TLSv1 Cifrado: RC4-SHA ID de sesión: 745F84194498529B91B7D9194363CBBD23425446CF2BFF3BF5557E3C6606CA06 Session-ID-ctx: Master-Key: DED1AE0A44609F9D6F54626F4370ED96436A561A59F64D66240A277066322DCD2CCB9A6D198C95F4D2B0C7E6781EECD2 Key-Arg: Ninguno Hora de inicio: 1397678434 Tiempo de espera: 300 (seg) Verifique el código de retorno: 20 (no se puede obtener el certificado de emisor local) --- + OK Gpop listo para solicitudes de 69.3.61.10 c13mb42148040pdj HECHO
echo "" | openssl s_client -showcerts -connect secure.emailsrvr.com:995
CONECTADO (00000003) profundidad = 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CAerror de verificación : num = 19: certificado autofirmado en la cadena de certificados verificar devolución: 0 --- Cadena de certificados 0 s: / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU = Ver www.rapidssl.com/resources/cps (c) 14 / OU = Control de dominio validado - RapidSSL (R) /CN=secure.emailsrvr.com i: / C = US / O = GeoTrust, Inc./CN=RapidSSL CA ----- COMIENCE EL CERTIFICADO ----- ----- FINALIZAR CERTIFICADO ----- 1 s: / C = US / O = GeoTrust, Inc./CN=RapidSSL CA i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- COMIENCE EL CERTIFICADO ----- ----- FINALIZAR CERTIFICADO ----- 2 s: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- COMIENCE EL CERTIFICADO ----- ----- FINALIZAR CERTIFICADO ----- --- Certificado del servidor subject = / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU = Ver www.rapidssl.com/resources/cps (c) 14 / OU = Control de dominio validado - RapidSSL (R) /CN=secure.emailsrvr.com emisor = / C = US / O = GeoTrust, Inc./CN=RapidSSL CA --- No se enviaron nombres de CA de certificado de cliente --- El protocolo de enlace SSL ha leído 3876 bytes y escrito 319 bytes --- Nuevo, TLSv1 / SSLv3, Cipher es DHE-RSA-AES256-SHA La clave pública del servidor es de 2048 bits La renegociación segura es compatible Compresión: NINGUNO Expansión: NINGUNO Sesión SSL: Protocolo: TLSv1 Cifrado: DHE-RSA-AES256-SHA ID de sesión: 3F4EE3992B46727BE2C7C3E76A9A6A8D64D66EE843CB1BB17A76AE2E030C7161 Session-ID-ctx: Master-Key: 016209E50432EFE2359DB73AB527AF718152BFE6F88215A9CE40604E8FF2E2A3AC97A175F46DF737596866A8BC8E3F7F Key-Arg: Ninguno Hora de inicio: 1397678467 Tiempo de espera: 300 (seg) Verifique el código de retorno: 19 (certificado autofirmado en la cadena de certificados) --- HECHO
He estado tratando de entender si esto es significativo, porque cuando -CApath
se proporciona la opción, los comandos no producen ningún error:
openssl s_client -CApath /etc/ssl/certs -showcerts -connect secure.emailsrvr.com:995
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = "GeoTrust, Inc.", CN = RapidSSL CA
verify return:1
depth=0 serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD, OU = 4159320284, OU = See www.rapidssl.com/resources/cps (c)14, OU = Domain Control Validated - RapidSSL(R), CN = secure.emailsrvr.com
verify return:1
...
openssl s_client -CApath /etc/ssl/certs -showcerts -connect pop.gmail.com:995
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = pop.gmail.com
verify return:1
...
También puedo usar la -CAfile
opción con éxito después de descargar el certificado CAfile directamente desde GeoTrust.
Sin embargo, Fog Creek parece pensar que el problema radica en el certificado, porque han intentado agregar el certificado a la Trust
tienda de mono sin éxito. No estaría de acuerdo con ellos, pero (como se mencionó anteriormente) aunque la mayoría de los verificadores SSL no verifican el puerto 995 o no tienen éxito durante el intento, encontré esta página que produce el error 7 de SSL.
¿Interpreto correctamente la salida que significa que no hay nada malo con el certificado?
fuente
openssl s_client
que no importa ningún certificado raíz de forma predeterminada. Intente esto en su lugar:openssl s_client -connect secure.emailsrvr.com:995 -showcerts -CApath /etc/ssl/certs
y probablemente encontrará que el error autofirmado desaparece.Respuestas:
La respuesta (como se explica en esta publicación de security.SE ) es que los dos certificados GeoTrust Global CA que ve en la cadena no son, de hecho, el mismo certificado , uno se deriva del otro.
¡Debido a la firma cruzada de CA!
Cuando el certificado GeoTrust Global CA se creó y firmó por primera vez, ninguna computadora / navegador / aplicación lo habría tenido en su almacén de confianza.
Al hacer que otra CA (con una reputación y distribución preexistentes) firme el certificado de CA raíz de GeoTrust, el certificado resultante (denominado certificado "puente") ahora puede ser verificado por la segunda CA, sin que el certificado de CA raíz de GeoTrust tenga para que el cliente confíe explícitamente.
Cuando Google presenta la versión con firma cruzada del certificado de CA raíz de GeoTrust, un cliente que no confía en el original solo puede usar el certificado de CA de Equifax para verificar GeoTrust, por lo que Equifax actúa como una especie de ancla de confianza "heredada".
fuente
Tuve un problema similar con fetchmail cuando habilité la comprobación de SSL
pop.gmail.com
.Descargué el archivo pem Equifax pero no funcionó como está, tuve que ejecutarlo, lo
c_rehash ssl/certs
que creó un enlace simbólico con valor hash, luego simplemente funcionó.Alternativamente, el valor hash también se puede conocer ejecutando ...
https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem
fuente
Al generar y configurar certificados, también se debe actualizar el
openssl.cnf
archivo (Debian -/etc/ssl/openssl.cnf
), para indicar la ruta correcta, los nombres de los certificados, etc., luego puede ejecutar el comando y verificarlos sin-CApath
opción.Y, en consecuencia, los hosts remotos también podrían verificar sus certificados correctamente en este caso.
Aquí está la
openssl.cnf
sección apropiada :fuente
default_ca
datos en el archivo de configuración openssl (cualquiera) se usan solo para que la utilidad 'ca' emita y opcionalmente revoque certificados, nunca para verificación. La forma de cambiar el almacén de verificación predeterminado (además de volver a compilar) es con las variables de entorno SSL_CERT_ {FILE, DIR}. Sin embargo (1) debido a un errors_client
, no utiliza el valor predeterminado (corrección planificada a partir de abril de 2015) que (2) este OP no quería cambiar de todos modos.