2012-01-16 63 views
8

Tôi đang sử dụng libcurl trong ứng dụng C của mình để liên lạc với một máy chủ HTTPS mà tôi đã thiết lập. Tôi tạo ra một chứng chỉ tự ký trên máy chủ mà tôi muốn sử dụng với curl.Thêm chứng chỉ SSL tự ký cho libcurl

Tôi biết thiết lập CURLOPT_SSL_VERIFYPEER thành 0 để bỏ qua xác minh SSL, nhưng tôi muốn thêm chứng chỉ được tạo để chứng nhận CA "hợp lệ" của curl.

Tôi đã thử đặt CURLOPT_CAPATH và CURLOPT_SSLCERT thành vị trí của khóa công cộng SSL của máy chủ nhưng không thể vượt qua quá trình xác minh.

Tôi làm cách nào để thêm chứng chỉ CA/Tự ký của riêng mình để libcurl xác thực thành công nó?

+3

Thêm bản cập nhật như một câu trả lời. btw, '--libcurl' curl tùy chọn có thể tạo ra libcurl-sử dụng mã nguồn (để xem những tùy chọn bạn có thể sử dụng) nếu bạn đã có một curl-lệnh làm việc. – jfs

Trả lời

2

Để thêm một chứng chỉ tự ký, sử dụng CURLOPT_CAINFO

Để lấy giấy chứng nhận công SSL của một trang web, sử dụng

openssl s_client -connect www.site.com:443 | tee logfile 

Giấy chứng nhận là phần đánh dấu bằng ----BEGIN CERTIFICATE----
---END CERTIFICATE---- .

Lưu chứng chỉ vào một tập tin, và sử dụng curl một cách như vậy:

CURL* c = curl_easy_init(); 
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com"); 
curl_easy_setopt(c, CURLOPT_CAINFO, "/path/to/the/certificate.crt"); 
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1); 
curl_easy_perform(c); 
curl_easy_cleanup(c); 
0

Trước tiên, bạn loại trộn "Certificate Authority" tập tin và "Giấy chứng nhận" các tập tin mà confuses me.

Tôi làm cách nào để thêm chứng chỉ CA/Tự ký của riêng mình để libcurl sẽ xác thực thành công?

Đây có thể được xem là câu trả lời bổ sung cho câu hỏi trên. Trong trường hợp bạn muốn thêm CA tự ký (mọi gốc-CA là tự ký) để libcurl xác thực thành công chứng chỉ của trang web, được tạo bởi CA, sau đó tiếp tục đọc.

Với CURLOPT_CAINFO bạn cần chuyển tệp "Tổ chức phát hành chứng chỉ" (CA) đã được sử dụng khi tạo chứng chỉ (không phải CA) của trang web bạn muốn xác minh.

(Tôi không biết nếu tùy chọn này hoạt động bằng cách chuyển chứng chỉ không phải CA, tài liệu chưa thực sự rõ ràng về điều này và câu trả lời trước có 2 phiếu bầu, vì vậy nếu có ai đó đã kiểm tra thì hãy bình luận)

Bạn cũng có thể chuyển tệp chuỗi chứng chỉ của Tổ chức phát hành chứng chỉ chứa CA đã được sử dụng, trong trường hợp đó không phải là gốc-CA.

Dưới đây là một chút hướng dẫn, tôi đã phát hiện ra rằng có thể giúp bạn kiểm tra giải pháp của bạn:

Tạo một CA gốc tin: http://www.flatmtn.com/article/setting-openssl-create-certificates

Tạo một chứng chỉ trang web: http://www.flatmtn.com/article/setting-ssl-certificates-apache

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