Tôi đang cố gắng viết tập lệnh PHP bằng cURL có thể ủy quyền cho người dùng thông qua trang sử dụng chứng chỉ SSL, ngoài tên người dùng và mật khẩu và tôi dường như không thể qua giai đoạn SSL cert.Lỗi khi sử dụng PHP cURL với chứng chỉ SSL
Trong trường hợp này, không may là curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
. Chứng chỉ là phần xác thực bắt buộc, nếu không tôi sẽ gặp lỗi được đề cập trong this other similar SO post.
Tôi đã thử một vài dòng lệnh chạy với cURL:
> curl --url https://website
này trả về lỗi (60) SLL certificate problem
. Nếu tôi điều chỉnh lệnh để bao gồm các tùy chọn --cacert
:
> curl --url https://website --cacert /path/to/servercert.cer
Nó hoạt động tốt; trang web auth được trả về.
Tuy nhiên, tôi đã thử các mã PHP sau:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
Tôi đã có thể nghĩ mã là về cơ bản tương tự như các lệnh shell, nhưng thay vào đó tôi đang chào đón với thông báo lỗi sau:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
Tôi đã đọc tất cả các tài liệu tôi có thể tìm thấy (đặc biệt là trên php.net và curl.haxx) và dường như không tìm thấy bất kỳ điều gì khắc phục sự cố này. Bất kỳ đề xuất?
EDIT: Tôi đã thử chmod 777 servercert.cer
không thành công. Tuy nhiên, khi thực thi kịch bản PHP với mã trên từ dòng lệnh thay vì trình duyệt qua php test.php
, nó hoạt động hoàn hảo. Bất kỳ giải thích cho lý do tại sao nó không hoạt động trong trình duyệt?
CHỈNH SỬA 2: Những ổ đĩa này chỉ dành cho những linh hồn duy nhất đủ can đảm để trả lời câu hỏi này đang cũ. Hoặc là đóng góp một cái gì đó có ý nghĩa hoặc đi qua bởi, xin vui lòng.
PHP chắc chắn có quyền đọc tệp đó không? Thử chạy tập lệnh từ dòng lệnh: php my.php – Greg
Lạ! Tôi đã thử nghiệm nó như bạn đã nói, và nó hoạt động hoàn hảo! Tại sao nó hoạt động từ dòng lệnh, nhưng không hoạt động trên trình duyệt? – Magsol
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 –