2013-07-11 41 views
16

Tôi đã sao chép tệp PEM vào/usr/local/share/ca-certificates/và chạy cập nhật-ca-chứng chỉ và tôi đã xác minh rằng chứng chỉ kết quả hiện được bao gồm trong /etc/ssl/certs/ca-certificates.crt đó là tập tin được in bởi curl-config --ca. Tôi cũng đã xác minh rằng chứng chỉ được in bởi openssl s_client -connect example.com:443 giống với tệp PEM của tôi. Tuy nhiên, tôi vẫn tiếp tục nhận được thông báo "lỗi: 14090086: SSL thường: SSL3_GET_SERVER_CERTIFICATE: xác minh chứng chỉ không thành công". Điều này xảy ra ngay cả khi tôi sử dụng tùy chọn --cacert của curl như được mô tả tại http://curl.haxx.se/docs/sslcerts.html để cho biết nó sử dụng chứng chỉ nào.Tại sao curl không nhận dạng chứng chỉ SSL tự ký?

Nó hoạt động nếu tôi vô hiệu hóa xác minh chứng chỉ hoàn toàn với curl -k, nhưng tôi không muốn làm điều đó bởi vì tôi đang cố gắng để viết một khai thác thử nghiệm đó là nghĩa vụ phải kiểm tra SSL đúng cách.

Nó hoạt động tốt nếu tôi truy cập cùng một URL trong lynx, thường phàn nàn nếu có bất kỳ lỗi SSL nào. Nhưng tôi không thể sử dụng Lynx cho việc khai thác thử nghiệm này, trừ khi tôi có thể tìm ra cách nào đó để sử dụng AsyncHTTPClient của Tornado thay vì libcurl. Và nó dường như không có ý nghĩa gì khi cài đặt chứng chỉ tự ký đáp ứng Lynx nhưng không làm cong.

Tôi đang sử dụng Ubuntu 12.04 LTS trong VirtualBox hỗ trợ âm đạo; nó có curl 7.22.0. Proxy chấm dứt SSL là nginx/1.3.13 chạy trên cùng một máy và tên miền được trỏ đến 127.0.0.1 bởi một mục nhập trong/etc/hosts.

Bất kỳ manh mối nào về vấn đề này có thể là gì? Cảm ơn.

Trả lời

14

Khi chúng tôi đang sử dụng cURL để truy xuất trang web HTTPS không sử dụng chứng chỉ được ký CA, sự cố sau xảy ra.

curl https://example.selfip.com 
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
More details here: http://curl.haxx.se/docs/sslcerts.html 

Tất nhiên, điều này có thể dễ dàng khắc phục bằng cách sử dụng tùy chọn -k.

Giải pháp:

Bước 1
Xác định thư mục cài đặt OpenSSL của bạn sử dụng.

[email protected]:~# openssl version -d 
OPENSSLDIR: "/usr/lib/ssl" 

Bước 2
Thay đổi thư mục đó và liệt kê nội dung thư mục. Bạn sẽ thấy một thư mục gọi là “certs”.

[email protected]:~# cd /usr/lib/ssl && ls -al 

Bước 3
Thay đổi thư mục đó.

[email protected]:/usr/lib/ssl# cd certs 

Liệt kê nội dung thư mục. Bạn sẽ thấy từ các liên kết tượng trưng mà các chứng chỉ thực sự được lưu trữ trong /usr/share/ca-certificates.

Bước 4
Thay đổi để /usr/share/ca-certificates thư mục và thêm bạn chứng chỉ tự ký ở đó, (ví dụ: your.cert.name.crt)

Bước 5
Thay đổi để /etc thư mục và chỉnh sửa tập tin ca-certificates.conf.

[email protected]:# cd /etc 
[email protected]:# nano ca-certificates.conf 

Thêm your.cert.name.crt vào tệp (ca-certificates.conf) và lưu.

Bước cuối:

Thực hiện các chương trình update-ca-certificates –fresh.
Lưu ý: Bạn có thể muốn sao lưu /etc/ssl/certs trước khi thực hiện lệnh.

[email protected]:# update-ca-certificates --fresh 
Clearing symlinks in /etc/ssl/certs...done. 
Updating certificates in /etc/ssl/certs....done. 
Running hooks in /etc/ca-certificates/update.d....done. 

Kiểm tra với curl trên trang web HTTPS mục tiêu của bạn và nó sẽ hoạt động ngay bây giờ.

Source

Các vấn đề liên quan