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 conf ควรเป็น 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>

ฉันไม่พบปัญหาของฉันคือ ... (ติดตั้งใบรับรอง CA ไว้ใน lubuntu ของฉัน 14.04) เว็บไซต์ของพวกเขาไม่สามารถใช้งานได้เพราะพวกเขาเชื่อมโยงใบรับรองระดับ 1 ของพวกเขา แต่ของฉันออกโดย Class 2


ระบบปฏิบัติการใด อัปเดตใบรับรอง ca ล่าสุดหรือไม่ มีการอัปเดตสำหรับ Ubuntu เมื่อวันที่ 2015-02-23 จะเกิดอะไรขึ้นถ้าคุณเพิ่ม-CApath /etc/ssl/certs/หรือที่จัดเก็บคอนเสิร์ตของคุณ คุณอาจไม่มีใบรับรองหลักในโซ่หรือไม่
sebix

ว้าวคุณชี้ให้ฉันไปในทิศทางที่ถูกต้อง ขอบคุณ! echo | openssl s_client -connect seafile.mydomain.ch:443 -CApath / etc / ssl / certs / -> ตรวจสอบรหัสส่งคืน: 0 (ตกลง) DISTRIB_DESCRIPTION = "Ubuntu 14.04.2 LTS" ระบบอัพเดด: 0 อัพเกรดแล้ว 0 เพิ่งติดตั้งใหม่ 0 เพื่อลบและ 0 ไม่ได้อัพเกรด แพ็คเกจ: ii ca-certificate 20141019ubuntu0.14.04.1
Dionysius

คำตอบ:


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-certificates.crt

ไม่ว่าคุณจะให้เส้นทาง-CApathอะไรมันอาจทำงานได้เพราะ-CAfileตั้งค่าเป็นค่าเริ่มต้นด้วย (ซึ่งว่างเปล่าไว้ก่อนหน้า) ดังนั้นอย่าพึ่งพาพฤติกรรมเริ่มต้นของ OpenSSL ในการตรวจสอบใบรับรองโดยฐานข้อมูลใบรับรองท้องถิ่นอาจเป็นของปลอม!


ดังนั้นคุณหมายถึงว่าเซิร์ฟเวอร์ของฉันและการตั้งค่าระบบโน้ตบุ๊คของฉันไม่มีอะไรผิดปกติ (เพราะมันใช้ได้กับตัวเลือก -CApath) ถ้าอย่างนั้นมันเป็นความผิดของ seafile-client ที่แจ้งให้ฉันทราบถึงข้อผิดพลาดนั้น? บางทีปัญหาของมันนี้: github.com/haiwen/seafile-client/issues/93 - แต่ขอขอบคุณคุณทำเครื่องหมายเป็นแก้ไข :)
Dionysius

ฉันขุดเพิ่มเติมเกี่ยวกับพฤติกรรมของ OpenSSL ดูโพสต์ที่อัปเดตของฉัน คุณอาจพิจารณา upvoting;)
sebix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.