Как-то сегодня внезапно мой клиент seafile выдал эту ошибку. Я не верю, что это проблема с морским файлом, потому что мой 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.
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-certificates.crt.
Независимо от того, что вы указываете как путь -CApath
, это может сработать, потому что -CAfile
также установлено значение по умолчанию (которое до этого было пустым). Так, не полагайтесь на поведение OpenSSL по умолчанию при проверке сертификатов из локальной базы данных сертификатов, это может быть подделкой!