Bài viết được sự cho phép của BQT Kinh nghiệm lập trình Chào các bạn, bài viết hôm nay mình sẽ chia sẻ 1 cách để fix lỗi Curl SSL khi PHP hoạt động trên Windows Server trên nền IIS. Tuyển php nhiều ngành nghề hot trong tháng
Lỗi Curl SSL xảy ra khi nào?
Thông thường khi bạn cài đặt PHP trên máy chủ Windows Server, mọi thứ hoạt động bình thường. Cho đến một ngày bạn add thêm SSL Certificate cho ứng dụng của bạn. Có thể bạn sẽ gặp lỗi dưới đây:
“Curl [60] SSL Certificate Problem: Unable to get local issuer certificate”
PHP Curl được sử dụng trong hầu hết các ứng dụng có dùng API
Lỗi này không quá nghiêm trọng, tuy nhiên nếu không biết cách xử lý, bạn sẽ tốn khá nhiều thời gian vào việc này.
Fix lỗi Curl SSL Certificate Problem: Unable to get local issuer certificate
Vấn đề này xảy ra do bị thiếu chứng chỉ CA từ Mozilla. Do đó ta chỉ
cần thêm chứng chỉ này vào thư mục SSL của PHP.
Các bước thực hiện như sau:
- Bước 1: Tải “cacert.pem” từ link: //curl.haxx.se/docs/caextract.html [//curl.haxx.se/ca/cacert.pem]
- Bước 2: Lưu file cacert.pem vào folder SSL của PHP. Tùy thuộc vào phiên bản PHP bạn đang sử dụng. Đường dẫn có thể như sau:
- Bước 3: Thêm đường dẫn vào file cấu hình php.ini của bạn.
- Bước 4: Khởi động lại IIS Server của bạn. Có thể chạy câu lệnh “iisreset” từ command prompt với quyền admin để khởi động lại IIS server.
- Cuối cùng test và kiểm tra lại các bước thực hiện trên
Chúc các bạn thành công!
- Hướng dẫn tạo certificate SSL trên Windows [file key, pem]
- Fix Lỗi FTP Client Windows Server “Current Security Settings Do Not Allow This File To Be Downloaded”
- Xử lý SSL Certificate trong Selenium WebDriver
answer
275
Cuối cùng cũng có cái này để làm việc!
Tải về gói chứng chỉ .
Đặt nó ở đâu đó. Trong trường hợp của tôi, đó là
c:\wamp\
thư mục [nếu bạn đang sử dụng Wamp 64 bit thì nóc:\wamp64\
].Kích hoạt
mod_ssl
trong Apache vàphp_openssl.dll
trongphp.ini
[bỏ ghi chú chúng bằng cách xóa;
lúc đầu]. Nhưng hãy cẩn thận, vấn đề của tôi là tôi có haiphp.ini
tệp và tôi cần phải làm điều này trong cả hai. Một là cái bạn nhận được từ biểu tượng thanh tác vụ WAMP của bạn và một cái khác là, trong trường hợp của tôi, trongC:\wamp\bin\php\php5.5.12\
Thêm các dòng này vào chứng chỉ của bạn trong cả hai
php.ini
tệp:curl.cainfo="C:/wamp/cacert.pem" openssl.cafile="C:/wamp/cacert.pem"
Khởi động lại dịch vụ Wamp.
275 hữu ích 5 bình luận chia sẻ
answer
101
Disclaimer: Mã này làm cho máy chủ của bạn không an toàn.
Tôi gặp vấn đề tương tự trong tệp Mandrill.php sau dòng số 65 trong đó có ghi $ this-> ch = curl_init [];
Thêm hai dòng sau:
curl_setopt[$this->ch, CURLOPT_SSL_VERIFYHOST, 0];
curl_setopt[$this->ch, CURLOPT_SSL_VERIFYPEER, 0];
Điều này đã giải quyết vấn đề của tôi và cũng đã gửi email bằng localhost nhưng tôi đề nghị KHÔNG sử dụng nó trên phiên bản trực tiếp. Trên máy chủ trực tiếp của bạn, mã sẽ hoạt động mà không cần mã này.
101 hữu ích 4 bình luận chia sẻ
answer
41
Cảm ơn @Mladen Janjetovic,
Đề xuất của bạn đã làm việc cho tôi trong mac với cài đặt ampps.
Đã sao chép: //curl.haxx.se/ca/cacert.pem
Đến: /Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
Và
được cập nhật php.ini
với đường dẫn đó và khởi động lại Apache:
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
Và áp dụng cài đặt tương tự trong cài đặt Windows AMPPS và nó cũng hoạt động hoàn hảo trong đó.
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/Ampps/php/extras/ssl/cacert.pem"
openssl.cafile="C:/Ampps/php/extras/ssl/cacert.pem"
: Tương tự cho wamp.
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
openssl.cafile="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
Nếu bạn đang tìm cách tạo chứng chỉ SSL mới bằng SAN cho localhost, các bước trên bài đăng này đã có hiệu quả với tôi
Centos 7 / Vagrant / Chrome Browser
.
41 hữu ích 0 bình luận chia sẻ
answer
18
Khi bạn xem trang //curl.haxx.se/docs/caextract.html , bạn sẽ nhận thấy bằng chữ lớn một phần có tên:
Đã xóa RSA-1024
Đọc nó, sau đó tải xuống phiên bản chứng chỉ bao gồm chứng chỉ 'RSA-1024'. //github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
Những người sẽ làm việc với Mandrill.
Vô hiệu hóa SSL là một ý tưởng tồi.
18 hữu ích 5 bình luận chia sẻ
answer
10
Các bước trên, mặc dù hữu ích, không hoạt động với tôi trên Windows 8. Tôi không biết mối quan hệ đồng hành, nhưng các bước dưới đây đã hoạt động. Về cơ bản là một sự thay đổi trong tập tin cacert.pem. Hy vọng điều này sẽ giúp được ai đó.
- Tải xuống tệp cacert.pem từ đây: //curl.haxx.se/docs/caextract.html
- Lưu tệp trong thư mục cài đặt PHP của bạn. [ví dụ: Nếu sử dụng xampp - hãy lưu nó trong c: \ Installer_Dir \ xampp \ php \ cacert.pem].
- Mở tệp php.ini của bạn và thêm các dòng sau:
- curl.cainfo = xông C: \ Installer_Dir \ xampp \ php \ cacert.pem, openssl.cafile =, C: \ Installer_Dir \ xampp \ php \ cacert.pem tựa
- Khởi động lại máy chủ Apache của bạn và điều đó sẽ khắc phục nó [Đơn giản chỉ cần dừng và bắt đầu các dịch vụ khi cần thiết].
10 hữu ích 0 bình luận chia sẻ
answer
9
Tôi tìm thấy Giải pháp mới mà không có bất kỳ chứng nhận bắt buộc nào để gọi curl chỉ thêm hai mã dòng.
curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, TRUE];
curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, false];
9 hữu ích 3 bình luận chia sẻ
answer
7
Nếu bạn không có quyền truy cập vào php.ini , việc thêm mã này [sau $ch = curl_init[];
dòng của bạn ] sẽ hoạt động với tôi:
$certificate_location = "C:\Program Files [x86]\EasyPHP-Devserver-16.1\ca-bundle.crt"; // modify this line accordingly [may need to be absolute]
curl_setopt[$ch, CURLOPT_CAINFO, $certificate_location];
curl_setopt[$ch, CURLOPT_CAPATH, $certificate_location];
Sau đó, bạn sẽ chỉ cần tải
ca-bundle.crt và lưu nó vào vị trí bạn đã chỉ định $certificate_location
.
7 hữu ích 0 bình luận chia sẻ
answer
2
xây dựng các câu trả lời trên để triển khai máy chủ.
$hostname = gethostname[];
if[$hostname=="mydevpc"]
{
curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, TRUE];
curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, false];
}
nên thực hiện thủ thuật cho môi trường phát triển mà không ảnh hưởng đến máy chủ khi triển khai.
2 hữu ích 1 bình luận chia sẻ
answer
0
Tôi gặp vấn đề tương tự trong quá trình xây dựng ứng dụng của mình trong AppVeyor.
- Tải xuống //curl.haxx.se/ca/cacert.pem để
c:\php
- Kích hoạt openssl
echo extension=php_openssl.dll >> c:\php\php.ini
- Xác định vị trí
echo curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini
0 hữu ích 0 bình luận chia sẻ
answer
0
Nếu không có giải pháp nào ở trên hoạt động cho bạn, hãy thử cập nhật cài đặt XAMPP của bạn lên phiên bản mới hơn.
Tôi đã chạy XAMPP với php 5.5.11, cùng một mã chính xác không hoạt động, tôi đã nâng cấp lên XAMPP với php 5.6.28 và các giải pháp trên đã hoạt động.
Ngoài ra, chỉ cập nhật PHP không hoạt động có vẻ như là sự kết hợp của cài đặt apache và php trên phiên bản XAMPP đó.
Hy vọng nó sẽ giúp được ai đó.
0 hữu ích 0 bình luận chia sẻ
answer
0
Tôi có giải pháp rất đơn giản cho vấn đề này. Bạn có thể làm điều này mà không cần bất kỳ tập tin chứng chỉ ..
Đi trên Laravel thư mục gốc -> Vender -> guzzlehttp -> tật ham ăn -> src
mở Client.php
tìm $ mặc định Mảng. Trông giống như thế này ..
$defaults = [
'allow_redirects' => RedirectMiddleware::$defaultSettings,
'http_errors' => true,
'decode_content' => true,
'verify' => true,
'cookies' => false
];
Bây giờ công việc chính là thay đổi giá trị của khóa xác minh ..
'verify' => false,
Vì vậy, sau này, nó sẽ không kiểm tra Chứng chỉ SSL cho Yêu cầu CURL ... Giải pháp này phù hợp với tôi. Tôi tìm thấy giải pháp này sau nhiều nghiên cứu ...
0 hữu ích 0 bình luận chia sẻ
answer
0
Tôi đã thử nó hoạt động
mở
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
và thay đổi điều này
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
`enter code here`$conf[CURLOPT_SSL_VERIFYPEER] = true;
đến đây
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
0 hữu ích 0 bình luận chia sẻ
answer
0
Tôi đã nhận được lỗi như:
failed loading cafile stream: `C:\xamppPhp\apache\bin\curl-ca-bundle.crt`
Tôi đang sử dụng máy windows. Vì vậy, tôi làm theo các bước dưới đây.
1. I have downloaded .pem file from " //curl.haxx.se/docs/caextract.html "
2. Then I kept the downloaded file inside "C:/xamppPhp/apache/bin/" folder and renamed the same downloaded file to "curl-ca-bundle.crt".
3. I restarted XAMPP and cleared the cache.
4. It's done.
Hy vọng nó có thể giúp được ai đó
0 hữu ích 0 bình luận chia sẻ