apache ssl - tidak bisa mendapatkan sertifikat penerbit lokal

10

Entah bagaimana hari ini tiba-tiba klien seafile saya melempar kesalahan ini. Saya tidak percaya ini masalah dasar lautan, karena openssl saya melempar kesalahan yang sama persis:

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

Bagi saya bagian rantai terlihat persis seperti apa seharusnya. Conf apache juga harus ok:

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>

Saya tidak dapat menemukan apa masalah saya ... (sertifikat-ca diinstal di lubuntu 14.04 saya). Situs mereka tidak berlaku karena mereka menautkan sertifikat Kelas 1 mereka, tetapi milikku dikeluarkan oleh Kelas 2 mereka.

Dionysius
sumber
Sistem operasi apa? Diperbarui ca-sertifikat baru-baru ini? Ada pembaruan untuk Ubuntu pada 2015-02-23. Bagaimana jika Anda menambahkan -CApath /etc/ssl/certs/atau di mana sertifikat Anda disimpan? Apakah Anda mungkin kehilangan sertifikat root di rantai?
Sebix
Woow, Anda mengarahkan saya ke arah yang benar. Terima kasih! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / etc / ssl / certs / -> Verifikasi kode kembali: 0 (ok) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS". Sistem uptodate: 0 ditingkatkan, 0 baru dipasang, 0 untuk dihapus dan 0 tidak ditingkatkan. Paket: ii ca-sertifikat 20141019ubuntu0.14.04.1
Dionysius

Jawaban:

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

Kesalahan ini oleh OpenSSL berarti program tidak dapat memverifikasi penerbit sertifikat atau sertifikat teratas dari rantai yang disediakan. Ini dapat terjadi dalam beberapa kasus, misalnya:

  • Rantai sertifikat untuk sertifikat tersebut tidak disediakan oleh pihak lain atau tidak memilikinya (ditandatangani sendiri).
  • Sertifikat root tidak ada dalam database lokal sertifikat root tepercaya.
  • Basis data lokal sertifikat root tepercaya tidak diberikan dan karenanya tidak dipertanyakan oleh OpenSSL. Untuk memberikan jalur ke sertifikat secara eksplisit, gunakan opsi -CApathatau -CAfile. Untuk Debian dan Ubuntu misalnya:

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

    sehingga menghasilkan keduanya

    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
    

Yang terakhir membutuhkan lebih banyak informasi. Ada laporan bug terbuka untuk OpenSSL di Ubuntu sejak 2009:

Menggunakan -CApath tampaknya mengatur -CAfile ke default /etc/ssl/certs/ca-certificates.crt.

Tidak peduli apa yang Anda berikan sebagai jalur -CApath, itu mungkin berhasil, karena -CAfilejuga ditetapkan ke nilai default-nya (yang sebelumnya kosong). Jadi, jangan mengandalkan perilaku default OpenSSL pada memverifikasi sertifikat oleh database sertifikat lokal, itu mungkin palsu!

sebix
sumber
Jadi maksud Anda, baik konfigurasi server dan sistem notebook saya tidak ada salahnya (karena tidak masalah dengan opsi -CApath)? Kalau begitu, ini merupakan kesalahan dari klien-laut yang memberitahukan saya tentang kesalahan itu? Mungkin ini masalah ini: github.com/haiwen/seafile-client/issues/93 - Tapi terima kasih, ditandai sudah diselesaikan :)
Dionysius
Saya menggali lebih dalam tentang perilaku OpenSSL, lihat posting saya yang diperbarui. Anda juga dapat mempertimbangkan upvoting;)
sebix