apache ssl - неможливо отримати сертифікат місцевого емітента


10

Якось просто сьогодні раптом мій клієнт-морський сервер кинув цю помилку. Я не вірю в його проблему з морським файлом, тому що мій openssl видає таку саму помилку:

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/emailAddress=postmaster@mydomain.ch
   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/emailAddress=postmaster@mydomain.ch
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

Для мене частина ланцюга виглядає саме так, як повинна. Конфігурація apache також повинна бути в порядку:

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>

Я не можу знайти мою проблему ... (ca-сертифікати встановлені на моєму lubuntu 14.04). Їх сайт не застосовується, оскільки вони пов’язали свій сертифікат 1 класу, але мій видається їх класом 2.


Яка операційна система? Оновлено нещодавно сертифікати ca? Були оновлені для Ubuntu 2015-02-23. Що робити, якщо ви додасте -CApath /etc/ssl/certs/або де зберігаються ваші серти? Можливо, вам не вистачає кореневого сертифіката в ланцюжку?
sebix

Ву, ти вказуєш мене в правильному напрямку. Дякую! echo | openssl s_client -connect seafile.mydomain.ch:143 -CApath / etc / ssl / certs / -> Перевірте код повернення: 0 (ok) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS". Оновлення системи: 0 оновлено, 0 знову встановлено, 0 видалити та 0 не оновлено. Пакет: ii ca-сертифікати 20141019ubuntu0.14.04.1
Діонісій

Відповіді:


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

Ця помилка OpenSSL означає, що програма не змогла перевірити емітента сертифіката або найвищого сертифіката наданого ланцюга. Це може статися в деяких випадках, наприклад:

  • Інша сторона ланцюга сертифікатів не надана іншою стороною, або її немає (вона підписана самостійно).
  • Кореневий сертифікат відсутній у локальній базі даних довірених кореневих сертифікатів.
  • Локальна база даних надійних кореневих сертифікатів не була надана і, таким чином, OpenSSL не запитувалась. Щоб явно надати шлях до сертифікатів, скористайтеся опцією -CApathабо -CAfile. Для Debian і Ubuntu це:

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

    таким чином, в результаті виникає будь-яке

    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
    

Останній потребує додаткової інформації. Існує відкритий звіт про помилки для OpenSSL в Ubuntu з 2009 року:

Використовуючи -CApath, схоже, встановити -CAfile за замовчуванням /etc/ssl/certs/ca-certificate.crt.

Незалежно від того, що ви вказали як шлях -CApath, він може працювати, тому що -CAfileтакож встановлено значення за замовчуванням (яке було попередньо порожнім). Отже, не покладайтеся на поведінку OpenSSL за замовчуванням щодо перевірки сертифікатів локальною базою даних сертифікатів, це може бути помилково!


Отже, ви маєте на увазі, що або мій сервер, і конфігурація моєї ноутбукової системи не мають нічого поганого (тому що його штраф за допомогою параметра -CApath)? Ну що ж, винна програма-клієнт, який сповістив мене про цю помилку? Можливо, це питання: github.com/haiwen/seafile-client/isissue/93 - Але дякую, позначено як вирішене :)
Діонісій

Я більше поглибився в поведінці OpenSSL, дивіться моє оновлене повідомлення. Ви також можете розглянути питання про звернення до відповідальності;)
sebix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.