Curl: yerel yayıncı sertifikası alınamıyor. Hata ayıklama nasıl yapılır?


14

Garip bir sorunum var. LAMP geliştirme makinemi (Debian) PHP 7'ye güncelledim. Daha sonra artık Curl üzerinden belirli bir TLS şifreli API'ye bağlanamıyorum.

Söz konusu SSL sertifikası thawte tarafından imzalanmıştır.

curl https://example.com

bana verir

curl: (60) SSL certificate problem: unable to get local issuer certificate

buna karşılık

curl https://thawte.com

ki - tabii ki - Thawte çalışmaları tarafından imzalanmış.

API sitesine HTTPS aracılığıyla erişebilirim, örneğin masaüstümde curl ve tarayıcıda. Dolayısıyla sertifika kesinlikle geçerlidir. SSL Labs derecesi A'dır.

Geliştirici makinemden diğer SSL şifreli sitelere yapılan diğer Curl istekleri çalışır. Kök sertifikalarım güncel. Doğrulamak için koştum update-ca-certificates. Hatta http://curl.haxx.se/ca/cacert.pem dosyasını / etc / ssl / certs'e indirdim c_rehash.

Yine de aynı hata.

Doğrulama işleminde hata ayıklamanın ve hangi yerel sertifikanın sertifika kıvrımının (veya openssl) aradığını ancak bulamadığını, yani bir dosya adını görmenin herhangi bir yolu var mı?

GÜNCELLEME

curl -vs https://example.com

bana söyler (IP + Domain anonimleştirilmiş)

* Hostname was NOT found in DNS cache
*   Trying 192.0.2.1...
* Connected to example.com (192.0.2.1) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0

Ve

echo | openssl s_client -connect example.com:443

verir

CONNECTED(00000003)
depth=2 C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "(c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=DE/ST=XYZ/CN=*.example.com
   i:/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
 1 s:/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
 2 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
   i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
subject=/C=DE/ST=XYZ/CN=*.example.com
issuer=/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
---
No client certificate CA names sent
---
SSL handshake has read 4214 bytes and written 421 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: [...]
    Session-ID-ctx:
    Master-Key: [...]
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 5a 95 df 40 2c c9 6b d5-4a 50 75 c5 a3 80 0a 2d   Z..@,.k.JPu....-
    [...]
    00b0 - d5 b9 e8 25 00 c5 c7 da-ce 73 fb f2 c5 46 c4 24   ...%.....s...F.$

    Start Time: 1455111516
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
DONE

1
En azından bu cmd'nin ayrıntılı çıktısını verebilir misiniz? curl -vs https://example.com echo | openssl s_client -connect example.com:443
François

Yanıtlar:


8

openssl s_client -connect thawte.com:443Gösterileri kullanma :

---
Certificate chain
 0 s:/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/O=Thawte, Inc./C=US/ST=California/L=Mountain View/businessCategory=Private Organization/serialNumber=3898261/OU=Infrastructure Operations/CN=www.thawte.com
   i:/C=US/O=thawte, Inc./CN=thawte Extended Validation SHA256 SSL CA
 1 s:/C=US/O=thawte, Inc./CN=thawte Extended Validation SHA256 SSL CA
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2008 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA - G3
---

Bu son "i", kendiliğinden imzalanan kök CA'yı verir. O Thawte kök CA'sının _i.e olduğunu tahmin ediyorum. İlköğretim Kök CA - G3 sertifika, sizin değil /etc/ssl/certs(belirtildiği şekilde dizine curlçıkışı; openssl s_clientvarsayılan bir CA yolu yoktur ve açıkça verilmiş birine ihtiyaçları mesela -CApath /etc/ssl/certs ).

Bu sertifikayı /etc/ssl/certsdizininize açıkça eklemek (ve yeniden çalıştırmak c_rehash) kesinlikle zarar vermez. Ve eğer, örneğin kullanılarak doğrulandığı gibi çalışıyorsa, openssl s_client -connect example.com:443 -CApath /etc/ssl/certsbu update-ca-certificateskomutun neden bu kök CA'yı neden almadığı konusunda biraz inceleme / hata ayıklamaya ihtiyacı olabileceğini biliyorsunuz .

Şimdi, yukarıdaki kök CA zaten /etc/ssl/certsdizininizde olabilir ve yukarıdaki adımların bir etkisi olmayabilir . Bu durumda, kontrol edilecek diğer iki CA sertifikası vardır (en azından tarafından sunulan sertifika zincirinde thawte.com:443): çözülme Birincil Kök CA ve çözülme SSL CA - G2 . Bu sertifikaları /etc/ssl/certsdizininize yüklemek (ve yeniden çalıştırmak c_rehash) için yukarıdaki adımları tekrarlamak işe yarayabilir. Bu ikisi ara CA'lar olduğundan ve kök CA'lar olmadığından, bunlardan birinin olmaması sonuçlarınızı açıklar ve gözden kaçan sertifikalar olarak beklenebilir update-ca-certificates.

Bu yardımcı olur umarım!


Teşekkürler! Ara sertifikayı "thawte SSL CA - G2" / etc / ssl / certs'e indirmek ve c_rehash'i yeniden çalıştırmak sorunu çözdü!
Rob

1
Bu openssl s_client -connect <server>:443 -CAfile cacert.pemkomut çok faydalı ... teşekkürler!
kris

0

Bunun nedeni, sitenin ortak anahtar sertifika dosyasındaki yanlış site sırası, verme, ara ve kök sertifikalar olabilir.

Ters-üst yönünde (kök, ara, yayınlayan, sitesi), fakat sertifikada tarayıcı ekranı sertifikalarını gereken alt-yukarı yönde (yer, veren, ara ürün, kök) olması.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.