Tôi đã có một vấn đề kỳ lạ. Đã cập nhật máy dev LAMP (Debian) của tôi lên PHP 7. Sau đó tôi không thể kết nối với API được mã hóa TLS cụ thể qua Curl nữa.
Chứng chỉ SSL trong câu hỏi được ký bởi thawte.
curl https://example.com
đưa cho tôi
curl: (60) SSL certificate problem: unable to get local issuer certificate
trong khi
curl https://thawte.com
Điều mà tất nhiên, cũng có thể được ký kết bởi các tác phẩm của Thawte.
Tôi có thể truy cập trang web API thông qua HTTPS trên các máy khác, ví dụ: Máy tính để bàn của tôi thông qua curl và trong trình duyệt. Vì vậy, chứng chỉ chắc chắn là hợp lệ. Xếp hạng SSL Labs là A.
Bất kỳ yêu cầu Curl nào khác từ máy dev của tôi đến các trang web được mã hóa SSL khác đều hoạt động. Certs gốc của tôi được cập nhật. Để xác minh, tôi chạy update-ca-certificates
. Tôi thậm chí đã tải xuống http://curl.haxx.se/ca/cacert.pem để / etc / ssl / certs và chạy c_rehash
.
Vẫn cùng một lỗi.
Có cách nào để gỡ lỗi quá trình xác minh và xem curl chứng chỉ nhà phát hành địa phương (hoặc openssl) đang tìm kiếm nhưng không tìm thấy, tức là tên tệp?
CẬP NHẬT
curl -vs https://example.com
cho tôi biết (IP + Tên miền ẩn danh)
* 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
Và
echo | openssl s_client -connect example.com:443
cho
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
curl -vs https://example.com echo | openssl s_client -connect example.com:443