2012-07-18 17 views
41

Estoy ejecutando Windows Vista y estoy intentando conectarme a través de https para cargar un archivo en un formulario de varias partes pero estoy teniendo problemas con el certificado de emisor local. Solo estoy tratando de descubrir por qué esto no funciona ahora, y volver a mi código cURL más tarde después de que esto se resuelva. Im ejecutando el comando:OpenSSL Verificar código de retorno: 20 (no se puede obtener el certificado de emisor local)

openssl s_client -connect connect_to_site.com:443 

Me da un certificado digital de VeriSign, Inc., pero también dispara un error:

Verify return code: 20 (unable to get local issuer certificate) 

¿Cuál es el certificado del emisor local? ¿Es eso un certificado de mi propia computadora? ¿Hay alguna forma de evitar esto? He intentado usar el archivo -CAfile mozilla.pem pero todavía me da el mismo error.

+0

Stack Overflow es un sitio que sirve para ver programación o desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte [Qué temas puedo preguntar aquí] (http://stackoverflow.com/help/on-topic) en el Centro de ayuda. Tal vez [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) o [Information Security Stack Exchange] (http://security.stackexchange.com/) sería un mejor lugar para preguntar. – jww

+0

¿Cuál es la URL del sitio? Ninguna de las respuestas es demasiado impresionante, pero no pueden responder a la pregunta porque usted eliminó detalles importantes, como el nombre del servidor. Además, 'connect_to_site.com' es (o puede ser) un sitio real. Debería usar 'example.com' porque IANA lo reserva para este propósito. – jww

+0

@jww no, no puede, los guiones bajos no son válidos en los nombres de dominio. –

Respuesta

1

¿Está configurado su servidor para la autenticación del cliente? Si es así, debe pasar el certificado del cliente mientras se conecta con el servidor.

+0

cómo pasar me puedes decir gracias .. –

75

Tuve el mismo problema y lo resolví al pasar la ruta a un directorio donde están almacenadas las claves de CA. En Ubuntu era:

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443 
+0

Esto funcionó en Ubuntu 12.04 para mí. – HDave

+1

Este problema se discute en [error de Ubuntu # 396818] (https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/396818). –

+0

¡Muchas gracias! Esto fue simplemente increíble, este fue el segundo día que estaba buscando esto y me estaba volviendo loco, incluso hice otro servidor para mi aplicación (uno en Digital Ocean y otro en Amazon). Gracias de nuevo. Aclamaciones. – Felipe

2

tuve el mismo problema en OSX OpenSSL 1.0.1i de MacPorts, y también tuvo que especificar capath como una solución (y como se menciona en el informe de error Ubuntu, incluso un inválida CApath hará que openssl se vea en el directorio predeterminado). Curiosamente, conectarse al mismo servidor utilizando las funciones openssl de PHP (como se usa en PHPMailer 5) funcionó bien.

0

Con la autenticación del cliente:

openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443 
2

Este error también ocurre si se está utilizando un certificado autofirmado con un keyUsage falta el valor keyCertSign.

+0

Pasé horas rastreando esto. ¡Gracias! –

+0

Acabo de probar incluso el certificado de CA con el uso: keyCertSign, el problema es el mismo. Parece que el certificado CA o el certificado raíz deben agregarse al certsDB de openssl (/etc/ssl/certs/ca-certificates.crt) – user1462586

3

Solución: Debe agregar explícitamente el parámetro -CAfile your-ca-file.pem.

Nota: Probé también el parámetro -CApath mencionado en otra respuesta, pero no funciona para mí.

Explicación: error unable to get local issuer certificate medios, que la openssl no conoce su certificado de entidad emisora ​​raíz.


Nota: Si usted tiene servidor web con más dominios, no olvide agregar -servername your.domain.net parámetro. Este parámetro "establecerá el nombre de servidor de la extensión TLS en ClientHello". Sin este parámetro, la respuesta siempre contendrá el certificado SSL predeterminado (no el certificado, que coincida con su dominio).

+0

Muchas gracias, lo he estado haciendo durante horas. ¡Nada funcionó más que esto! –

1

Me enfrenté al mismo problema, Se arregló después de mantener el valor del sujeto del emisor en el certificado, ya que está sujeto al certificado de emisor.

así que por favor marque "valor del sujeto del emisor en el certificado (cert.pem) == sujeto del emisor (CA.PEM)"

openssl verify -CAfile CA.pem cert.pem
cert.pem: OK

0

poner su certificado de CA raíz & en/usr/share/ca-certificado o/usr/local/share/ca-certificado. Entonces

dpkg-reconfigure ca-certificados

.

o incluso volver a instalar el paquete ca-certificado con apt-get

Después de hacer esto su certificado se recoge en el PP del sistema: /etc/ssl/certs/ca-certificates.crt

Entonces todo debería estar bien.

Cuestiones relacionadas