apache ssl: no se puede obtener el certificado de emisor local

10

De alguna manera, hoy, de repente, mi cliente de archivos marinos arrojó este error. No creo que sea un problema de archivo marino, porque mi openssl arroja exactamente el mismo error:

user@nb-user:~$ echo |openssl s_client -connect seafile.mydomain.ch:443
CONNECTED(00000003)
depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 2 Primary Intermediate Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/description=5RygJ9fx8e2SBLzw/C=CH/ST=Thurgau/L=Frauenfeld/O=mydomain GmbH/CN=*.mydomain.ch/[email protected]
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
 1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgIDAjmGMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ
TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0
[... some more lines]
-----END CERTIFICATE-----
subject=/description=5RygJ9fx8e2SBLzw/C=CH/ST=Thurgau/L=Frauenfeld/O=mydomain GmbH/CN=*.mydomain.ch/[email protected]
issuer=/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
---
No client certificate CA names sent
---
SSL handshake has read 3997 bytes and written 431 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 96E1F6B9E123F8F8C1C1E8FB0DBACDBBE76ECB3E2CF5C46C1FD2CF46833C8212
    Session-ID-ctx: 
    Master-Key: 25837E1786B0CC60E676D0694319641CD0887F9CAF48A820F1C0D6ABA6FDE0742551816ACD2A4885B0D3FC143716B1F6
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 88 15 c0 c5 30 04 63 d6-ff 7c 72 c4 12 84 7b d6   ....0.c..|r...{.
    0010 - 73 33 8d 91 7c da ce 22-23 d0 31 fb c1 7f 1c 9c   s3..|.."#.1.....
    [... some more lines]

    Start Time: 1424953937
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
DONE

Para mí, la parte de la cadena se ve exactamente como debería. El apache conf también debería estar bien:

root@i-can-haz-data ~ # cat /etc/apache2/sites-enabled/seafile.conf

<VirtualHost *:443>

    ServerName seafile.mydomain.ch
    DocumentRoot /opt/seafile/www

    [... seafile specific things]

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile      /etc/ssl/custom/wildcardmydomain.ch.crt
    SSLCertificateKeyFile   /etc/ssl/custom/wildcardmydomain.ch.key
    SSLCertificateChainFile /etc/ssl/custom/wildcardmydomain.ch.chain.crt

    [... seafile specific things]

</VirtualHost>

No puedo encontrar cuál es mi problema ... (ca-certificados está instalado en mi lubuntu 14.04). Su sitio no es aplicable porque vincularon su certificado de Clase 1, pero el mío es emitido por su Clase 2.

Dionisio
fuente
Cual sistema operativo ¿Has actualizado los certificados ca recientemente? Hubo actualizaciones para Ubuntu el 23/02/2015. ¿Qué -CApath /etc/ssl/certs/sucede si agrega o dónde se almacenan sus certificados? ¿Quizás te estás perdiendo el certificado raíz en la cadena?
sebix
Woow, me señalas en la dirección correcta. ¡Gracias! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / etc / ssl / certs / -> Verifique el código de retorno: 0 (ok) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS". Actualización del sistema: 0 actualizado, 0 recién instalado, 0 para eliminar y 0 no actualizado. Paquete: ii certificados ca 20141019ubuntu0.14.04.1
Dionysius

Respuestas:

19
verify error:num=20:unable to get local issuer certificate

Este error de OpenSSL significa que el programa no pudo verificar el emisor del certificado o el certificado superior de una cadena proporcionada. Esto puede suceder en algunos casos, por ejemplo:

  • La cadena de certificados para el certificado no fue proporcionada por el otro lado o no tiene uno (está autofirmado).
  • El certificado raíz no está en la base de datos local de certificados raíz confiables.
  • La base de datos local de certificados raíz de confianza no se proporcionó y, por lo tanto, OpenSSL no la consultó. Para dar la ruta a los certificados explícitamente, use la opción -CApatho -CAfile. Para Debian y Ubuntu es, por ejemplo:

    -CApath /etc/ssl/certs/
    -CAfile /etc/ssl/certs/ca-certificates.crt
    

    resultando así en cualquiera

    openssl s_client -connect example.com:443 -CApath /etc/ssl/certs/
    openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt
    

Este último necesita más información. Hay un informe de error abierto para OpenSSL en Ubuntu desde 2009:

El uso de -CApath parece establecer -CAfile en el valor predeterminado de /etc/ssl/certs/ca-certificates.crt.

No importa lo que proporcione como ruta -CApath, puede funcionar, porque -CAfiletambién está configurado en su valor predeterminado (que estaba vacío de antemano). Por lo tanto, no confíe en el comportamiento predeterminado de OpenSSL para verificar los certificados mediante una base de datos de certificados local, ¡puede ser falso!

sebix
fuente
Entonces, ¿quiere decir que mi servidor y la configuración del sistema de mi notebook no tienen nada de malo (porque está bien con la opción -CApath)? Bueno, entonces, ¿es culpa del cliente del archivo del mar que me notificó ese error? Tal vez sea este problema: github.com/haiwen/seafile-client/issues/93 - Pero gracias, marcado como resuelto :)
Dionysius
Investigué más sobre el comportamiento de OpenSSL, vea mi publicación actualizada. También puede considerar la votación positiva;)
sebix