Kıvrılma: SSL sertifikası sorunu, CA sertifikasının uygun olduğunu doğrulayın
07 Nisan 2006
Curl ile güvenli bir URL açarken aşağıdaki hatayı alabilirsiniz:
SSL sertifikası sorunu, CA sertifikasının uygun olduğunu doğrulayın
Hatanın nedenini ve bu konuda ne yapmanız gerektiğini açıklayacağım.
Hatadan kurtulmanın en kolay yolu betiğinize aşağıdaki iki satırı eklemek olacaktır. Bu çözüm bir güvenlik riski oluşturmaktadır.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
Bu iki parametrenin ne yaptığını görelim. Kılavuzdan alıntı.
CURLOPT_SSL_VERIFYHOST : 1 SSL eş sertifikasında ortak bir ad olup olmadığını kontrol etmek için. 2, ortak bir adın varlığını kontrol etmek ve sağlanan ana bilgisayar adıyla eşleştiğini doğrulamak için.
CURLOPT_SSL_VERIFYPEER : CURL'un eş sertifikasını doğrulamasını durdurmak için FALSE. Doğrulamak için alternatif sertifikalar CURLOPT_CAINFO seçeneğiyle belirtilebilir veya CURLOPT_CAPATH seçeneğiyle bir sertifika dizini belirtilebilir. CURLOPT_SSL_VERIFYPEER devre dışı bırakılmışsa CURLOPT_SSL_VERIFYHOST değerinin TRUE veya FALSE olması gerekebilir (varsayılan olarak 2'dir). CURLOPT_SSL_VERIFYHOST değerini 2 olarak ayarlamak (Bu varsayılan değerdir) size sunulan sertifikanın, uzak kaynağa erişmek için kullandığınız URN ile eşleşen bir 'ortak ada' sahip olduğunu garanti eder. Bu sağlıklı bir kontroldür ancak programınızın bozulmadığını garanti etmez.
'Ortadaki adamı' girin
Programınız bunun yerine başka bir sunucuyla konuşmak için yanlış yönlendirilebilir. Bu, dns veya arp zehirlenmesi gibi çeşitli mekanizmalarla başarılabilir (Bu, başka bir gün için bir hikaye). Davetsiz misafir ayrıca programınızın beklediği aynı 'ortak ad' ile bir sertifikayı da imzalayabilir. İletişim hala şifrelenirdi, ancak sırlarınızı bir sahtekâra veriyorsunuz. Bu tür saldırılara 'ortadaki adam' denir
'Ortadaki adamı' yenmek
Bize sunulan sertifikanın gerçekten iyi olduğunu doğrulamamız gerekiyor. Bunu makul * güvendiğimiz bir sertifika ile karşılaştırarak yaparız.
Uzak kaynak Verisign, GeoTrust ve diğerleri gibi ana CA'lardan biri tarafından verilen bir sertifika ile korunuyorsa, Mozilla'nın http://curl.haxx.se/docs/caextract adresinden alabileceğiniz CA sertifika paketiyle güvenle karşılaştırabilirsiniz.
.html
Dosyayı cacert.pem
sunucunuzda bir yere kaydedin ve betiğinizde aşağıdaki seçenekleri ayarlayın.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");