我想寫一個PHP腳本使用cURL,可以授權用戶通過使用SSL證書的頁面,除了用戶名和密碼,我似乎無法得到通過SSL認證階段。錯誤使用SSL證書的PHP cURL
在這種情況下,curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
不幸的是不是一個選項。證書是身份驗證的必需部分,否則我會收到this other similar SO post中提到的錯誤。
我已經嘗試了幾個命令行運行具有捲曲:
> curl --url https://website
這將返回(60) SLL certificate problem
錯誤。如果我調整命令包括--cacert
選項:
> curl --url https://website --cacert /path/to/servercert.cer
它工作得很好; auth網站返回。
不過,我已經嘗試下面的PHP代碼:
$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);
我還以爲代碼基本上類似於shell命令,而是我與以下錯誤消息映入眼簾:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
我已經閱讀了所有可以找到的文獻(特別是關於php.net和curl.haxx),並且似乎找不到解決此問題的任何內容。有什麼建議麼?
編輯:我試過chmod 777 servercert.cer
沒有成功。但是,在通過命令行而不是瀏覽器通過php test.php
執行上述代碼的PHP腳本中,它完美地工作。爲什麼它不能在瀏覽器中工作的任何解釋?
編輯2:這些推動對唯一靈魂勇敢地回答這個問題的靈魂已經變老了。請提供一些有意義的東西或傳遞。
PHP是否有權讀取該文件?嘗試從命令行運行腳本:php my.php – Greg 2009-04-08 18:08:59
奇怪!我按照你的說法對它進行了測試,結果非常完美!爲什麼它會在命令行中運行,而不是瀏覽器? – Magsol 2009-04-08 19:56:19
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 – 2011-08-04 09:20:47