2013-09-24 54 views
15

En uzun süre için localhost'umda cURL kullanıyordum ve aniden, bu seçeneği açık bir şekilde ayarlamadığım sürece aniden çalıştığımı fark ettim, CURLOPT_SSL_VERIFYPEER = FALSE.cURL, CURLOPT_SSL_VERIFYPEER = FALSE gerektirir

Bunun nasıl ve ne zaman değiştiği konusunda hiçbir fikrim yok ama NGINX ve PHP kullanıyorum ve bunun belirli bir istenen bir ana bilgisayar için belirli bir sorun olmadığını doğrulayabiliriz. https://site1.com ve https://different-site.com'dan boş yanıtlar alıyorum.

Herhangi bir fikri olan var mı?

+0

Bu [gizli mücevher] 'i (http://stackoverflow.com/a/12293898/) seviyorum, ana bilgisayarları doğrulamak için sertifikaları nasıl kullanabileceğinizi açıklar. –

+0

http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/ – Young

+0

@DaveChen ve - @ Genç teşekkürler, ancak bir Daha önce bir sertifika vermem gerekmediğini anladım, ama şimdi yapalım mı? –

cevap

28

Dave Chen'in önerileri sayesinde sertifikamın yanlış yerleştirilmiş olması gerektiğini fark ettim. http://curl.haxx.se/ca/cacert.pem

Yani PHP'de, projenize bu cacert.pem dosyasını indirdikten sonra artık bunu yapabilirsiniz:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem"); 

Alternatif olarak, bu sorun cURL yaratıcısı tarafından sağlanan bu sertifika tarafından çözüldü

curl_setopt ($ ch, CURLOPT_SSL_VERI: ekleyerek genel olarak ayarlanabilir php.ini

curl.cainfo=/path/to/cacert.pem 
+0

Parlak, bu benim için çalıştı! – Contango

+5

Ben bir güvenlik uzmanı değilim ama indirme .pem dosyası formu güvensiz kaynak (http :) güvenilir olabilir? – Gihan

+0

İki şekilde denendi. Ne işe yaramadı. – LXXIII

1

Bunu yapabilirsin için aşağıdaki FYPEER, doğru);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt ($ ch, CURLOPT_CAINFO, getcwd(). "/path/cert.pem");

ben dahil ettik Diğer seçenek, CURLOPT_SSL_VERIFYHOST aşağıdaki tamsayı değerlerine ayarlanabilir:

0: Ortak adı (CN) özniteliği
1 kontrol etmeyin: Check ortak isim niteliği de ortak adı varolduğunu edin ve gerçekten olsun ettik ne

Eğer CURLOPT_SSL_VERIFYPEER güvenlik açısından sonra, false olarak ayarlanırsa varsa, değil sunucunun ana bilgisayar adını eşleştiğini: az
2 var Sunucu sertifikası doğrulaması olmadan sunucu CURLOPT_SSL_VERIFYHOST değerini ayarlayabilir. sunucunun ana bilgisayar adıyla eşleşen bir CN'ye sahip olmasını garantileyen, kendinden imzalı bir sertifika da dahil olmak üzere, ny sertifikası. Bu nedenle, bu ayar gerçekten yalnızca sertifika doğrulamayı etkinleştirdiyseniz alakalı olur.

1

Eğer WampServer kullanıyorsanız, bunu fark:

Örneğin, CURLOPT_CAPATH içinde mutlak yolunu koymak gerekir:

curl_setopt ($ch, CURLOPT_CAINFO, 'C:\wamp\www\your-project\cacert.pem') 

göreli yolu kullanmayın: curl_setopt ($ ch, CURLOPT_CAINFO, 'cacert.pem') çünkü çalışmaz.