SSL sertifikaları ile PHP cURL kullanarak Hata

2 Cevap php

Ben kullanıcı adı ve şifre ek olarak bir SSL sertifikası kullanan bir sayfası aracılığıyla bir kullanıcı yetki olabilir cURL kullanarak bir PHP komut dosyası yazmak çalışıyorum, ve ben SSL sertifika aşamasında geçmiş olsun gibi olamaz.

Bu durumda, curl_setopt($handle, CURLOPT_VERIFYPEER, 0), ne yazık ki, bir seçenek değildir. Sertifika yoksa ben this other similar SO post belirtilen hata almak, kimlik doğrulama gerekli bir parçasıdır.

Birkaç komut satırı cURL ile çalışır denedim:

> curl --url https://website

Bu (60) SLL certificate problem hatası döndürür. Ben --cacert seçeneğini dahil komutunu ayarlayın eğer:

> curl --url https://website --cacert /path/to/servercert.cer

Gayet güzel çalışıyor; auth sitesi döndürülür.

Ancak, şu PHP kodu denedim:

$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);

Ben kodu kabuk komutları aslında benzer olduğunu, ama bunun yerine aşağıdaki hata mesajı ile karşılaşacaksınız sanırdım:

Hata: Hata ayarı sertifika yerleri doğrulayın: CAFile: / / yol / servercert.cer CApath: yok

Ben (özellikle php.net ve curl.haxx üzerinde) bulabilirsiniz ve bu sorunu giderir şey bulmak için görünmüyor olabilir, tüm edebiyat okudum. Herhangi bir öneriniz?

EDIT: Ben hiçbir başarı ile chmod 777 servercert.cer denedim. Ancak, php test.php vasıtasıyla yerine tarayıcı komut satırından Yukarıdaki kod ile PHP komut dosyası yürütme, mükemmel çalışıyor. Bu tarayıcıda neden çalışmıyor için herhangi bir açıklama?

EDIT 2: Bu drive-by bu soru eski alıyorsanız cevaplamak için yeterince cesur sadece ruhlar üzerinde downvotes. Anlamlı bir katkı veya tarafından geçmek, lütfen ya.

2 Cevap

Şeyler kıvırmak kullanarak php üzerinden komut satırı üzerinden değil, çalışmak çünkü sonra sorun olmaktan kıvırmak takip ediyorum.

Referans oldu bu URL'ye göre, http://curl.haxx.se/docs/sslcerts.html, hangi bir SO yukarıda anılan göndermeden (reading SSL page with CURL (php)) ...

"Until 7.18.0, curl bundled a severely outdated ca bundle file that was installed by default. These days, the curl archives include no ca certs at all. You need to get them elsewhere. See below for example.

If the remote server uses a self-signed certificate, if you don't install a CA cert bundle, if the server uses a certificate signed by a CA that isn't included in the bundle you use or if the remote host is an impostor impersonating your favorite site, and you want to transfer files from this server, do one of the following:"

Daha sonra deneyebilirsiniz bir dizi adım listesine gider.

Kıvrılma sizin 7.16.3 sürüm önceki 7.18.0 olduğu için değil zaten varsa, ben senin kıvırmak ve openssl bileşenlerini güncelleyerek ve daha sonra yukarıda başvurulan listesi üzerinden çalışan öneriyoruz.

Belki web sunucusu bu işlemi gerçekleştirmek için gerekli izinlere sahip değil?