apache ssl - không thể lấy chứng chỉ nhà phát hành địa phương


10

Bằng cách nào đó chỉ hôm nay đột nhiên khách hàng đi biển của tôi đã ném lỗi này. Tôi không tin đó là vấn đề về biển, bởi vì openssl của tôi gây ra lỗi tương tự chính xác:

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

Đối với tôi phần dây chuyền trông chính xác những gì nó cần. Các apache conf cũng nên 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>

Tôi không thể tìm thấy vấn đề của mình là gì ... (ca-chứng chỉ được cài đặt trên chiếc Ubuntu 14.04 của tôi). Trang web của họ không được áp dụng vì họ đã liên kết chứng chỉ Lớp 1 của họ, nhưng của tôi được cấp bởi Lớp 2 của họ.


Hệ điều hành nào? Cập nhật chứng chỉ ca gần đây? Đã có bản cập nhật cho Ubuntu vào ngày 2015 / 02-23. Điều gì nếu bạn thêm -CApath /etc/ssl/certs/hoặc nơi lưu trữ certs của bạn? Bạn có thể thiếu chứng chỉ gốc trong chuỗi?
sebix

Woow, bạn chỉ cho tôi đi đúng hướng. Cảm ơn bạn! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / vân vân Nâng cấp hệ thống: 0 nâng cấp, 0 mới cài đặt, 0 để gỡ bỏ và 0 không nâng cấp. Gói: ii ca-chứng chỉ 20141019ubfox0.14.04.1
Dionysius

Câu trả lời:


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

Lỗi này của OpenSSL có nghĩa là chương trình không thể xác minh nhà phát hành chứng chỉ hoặc chứng chỉ cao nhất của chuỗi được cung cấp. Điều này có thể xảy ra trong một số trường hợp, ví dụ:

  • Chuỗi chứng chỉ cho chứng chỉ không được cung cấp bởi phía bên kia hoặc nó không có (chứng chỉ tự ký).
  • Chứng chỉ gốc không có trong cơ sở dữ liệu cục bộ của chứng chỉ gốc đáng tin cậy.
  • Cơ sở dữ liệu cục bộ của chứng chỉ gốc đáng tin cậy đã không được cung cấp và do đó không được truy vấn bởi OpenSSL. Để cung cấp đường dẫn đến các chứng chỉ một cách rõ ràng, hãy sử dụng tùy chọn -CApathhoặc -CAfile. Đối với Debian và Ubuntu, ví dụ:

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

    do đó dẫn đến một trong hai

    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
    

Cái sau cần thêm thông tin. Có một báo cáo lỗi mở cho OpenSSL trong Ubuntu từ năm 2009:

Sử dụng -CApath dường như đặt -CAfile thành mặc định của /etc/ssl/certs/ca-certert.crt.

Không có vấn đề gì khi bạn đưa ra theo đường dẫn -CApath, nó có thể hoạt động, bởi vì -CAfilenó cũng được đặt thành giá trị mặc định (trước đó là trống). Vì vậy, đừng dựa vào hành vi mặc định của OpenSSL trong việc xác minh chứng chỉ bằng cơ sở dữ liệu chứng chỉ cục bộ, nó có thể không có thật!


Vì vậy, ý bạn là, máy chủ của tôi và cấu hình hệ thống máy tính xách tay của tôi không có gì sai (vì nó ổn với tùy chọn -CApath)? Vậy thì, đó là lỗi của khách hàng đi biển thông báo cho tôi lỗi đó? Có lẽ đây là vấn đề: github.com/haiwen/seafile-client/issues/93 - Nhưng cảm ơn bạn, được đánh dấu là đã giải quyết :)
Dionysius

Tôi đào sâu hơn vào hành vi của OpenSSL, xem bài đăng cập nhật của tôi. Bạn cũng có thể xem xét nâng cấp;)
sebix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.