오늘 갑자기 Seafile 클라이언트에서 이 오류가 발생했습니다. 내 openssl에서 똑같은 오류가 발생하기 때문에 Seafile 문제라고 생각하지 않습니다.
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
나에게 있어서 체인 부분은 정확히 그래야 하는 것처럼 보입니다. Apache conf도 정상이어야 합니다.
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에서 발급되었습니다.
답변1
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
후자는 더 많은 정보가 필요합니다. 이 있습니다Ubuntu에서 OpenSSL에 대한 버그 보고서 열기2009년 이후:
-CApath를 사용하면 -CAfile이 /etc/ssl/certs/ca-certificates.crt의 기본값으로 설정되는 것 같습니다.
에 의해 경로로 무엇을 제공하든 -CApath
작동할 수 있습니다. 왜냐하면 -CAfile
또한 기본값(이전에 비어 있었음)으로 설정되어 있기 때문입니다. 그래서,인증서 확인 시 OpenSSL의 기본 동작에 의존하지 마세요.로컬 인증서 데이터베이스에 따르면 가짜일 수 있습니다!