cURL Hatası (35) - Yardım Lütfen
Merhaba,
Aldığım hata hakkında bilgisi olan biri beni yönlendirebilir mi lütfen?
Çıktılar:
Curl errno: 35
Curl error: error:0A000152:SSL routines::unsafe legacy renegotiation disabled
Biraz araştırma yaptım, curlopt_ssl_verifyhost ve curlopt_ssl_verifypeer değerlerini false olarak ayarladım olmadı.
curlopt_cainfo => "cacert.pem" denedim olmadı. (bu konuda pek bilgim yok), sitenin perm dosyasını indirdim onu gösterdim değer olarak olmadı.
Daha önce bağlanılıyordu ama sanırım değişiklikler yapmışlar, hatadan anladığım kadarıyla ssl ile alakalı sizce localhostuma openssl ile kendinden imzalı ssl sertifakası kursam düzelirmi, daha önce tecrübe eden yada bilgisi olan paylaşırsa sevinirim.
Döküman, konu başlığı vs. de paylaşabilirsiniz. Şimdiden Teşekkür ederim.
Kod:
$headers = [
"accept: */*",
"accept-language: tr,en-US;q=0.9,en;q=0.8",
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded;charset=UTF-8",
"pragma: no-cache",
"sec-fetch-mode: cors",
"sec-fetch-site: same-origin",
"connection: keep-alive"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://...");
curl_setopt($ch, CURLOPT_REFERER, "https://...");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
// data
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch));
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_errno($ch) . ': ' . curl_error($ch);
curl_close($ch);
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
@cemcanpolat başta hatanın çıktısı curl 35 ifadesi ile curl'u işaret ettiğinden, curl'u hatalı kullandığınızı düşünerek kodlamanın üzerine yoğunlaşmıştım ama durum öyle değilmiş. stackoverflow da hatayı aratınca sorunun openssl ile alakalı olduğunu fark ettim. tekbaşına openssl'i güncelleştirmenin zahmetindense yerelde çalıştığınız ortamı kaldırıp daha güncel bir versiyon ile çalışınız. hosting üzerinde hata alıyorsanız, bu sizin çözebileceğiniz bir sorun değil çünkü erişim yetkiniz yok.
burada benzer bir sorun var ve nasıl çözüleceğini yeniden kurulum yapmadan anlatmışlar: https://stackoverflow.com/questions/71714254/site-works-on-chrome-but-not-on-curl
Yapmak istediğimi yapan bir js kütüphanesi var nodejs üzerinden çalıştırdım ve çalışıyor.
Ben php üzerinden test sunucularına ve test hesabına bağlanıp işlem yapabiliyorum. (e arşivin)
Veya başka curl isteklerimde çalışıyor curl'da sıkıntı yok yani.
Postman üzerinden çalışıyor. Postman üzerinden kodu aldım yapıştırdım php'de çalışmıyor aynı hata çıldıracam :)
Postman'de de benim koduma benzer bir kod verdı zaten.
Tahminim php 8.1'in yarattığı bir problem var.
Postman'den aldığım kodu yapıştırıyorum buraya denermisiniz lütfen.
Şifre kısımlarını sallıyorum bilgilerimi gizlemek için, kullanıcı bulunamadı hatalı vs gibi bir response alırsanız zaten çalışıyor demektir.
Bende bu hatayı veriyor. `
error:0A000152:SSL routines::unsafe legacy renegotiation disabled`
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://earsivportal.efatura.gov.tr/earsiv-services/assos-login',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => 'assoscmd=anologin&rtype=json&userid=12345678&sifre=123456&sifre2=123456&parola=1',
CURLOPT_HTTPHEADER => array(
'Referer: https://earsivportal.efatura.gov.tr/intragiris.html',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36',
'Content-Type: application/x-www-form-urlencoded'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Hocam neden postman üzerinde istek atıp çalışan kodun php curl olarak dökümünü almıyorsun. Senin için hazır yazıp veriyor zaten.
Hocam sizin yazdığınız kodu olduğu gibi kopyaladım aynı hatayı veriyor.
Galiba benim curl kitaplığında yada php'de bir problem var, zaten son günlerde başka problemlerde yaşattı bana ama çözdüğümü düşünmüştüm, demek ki çözememişim.
verifypeer ve verifyhost da denemiştim olmadı. Ben bir problemleri çözemye çalışayim dönecem size tekrar, lütfen takipte kalırmısınız?
Yardımınız içinde teşekkür ederim.
Bu arada sizin kullandığınız php sürümü nedir 7.4'mü yoksa 8.1'mi kullanıyorsunuz acaba?
o zaman ek olarak sertifikanın doğrulanmasını iptal etmek için şunu CURLOPT_SSL_VERIFYPEER
false ayarda kullanmayı dene. tam emin olmamak ile şunu da sıfır ayarında deneyebilirsin;
CURLOPT_SSL_VERIFYHOST
Common Name veya Subject Alternate Name alanının varlığının yanında
sağlanan konak ismi ile eşleşmenin de aranması için 2, isimlere bakmak
için 0 olmalıdır. 1 kullanılmamalıdır. Üretim ortamlarında bu seçeneğin
değeri 2 (öntanımlıdır) olarak tutulmalıdır.
edit;
ben sorunsuz bağlandım, eğer bağlanmak istediğiniz site şuysa, https://earsivportal.efatura.gov.tr/
HTTP/1.1 405 Method Not Allowed
Server: nginx/1.19.0
Date: Sat, 09 Jul 2022 21:09:00 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 104
Connection: keep-alive
X-Powered-By: Undertow/1
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
CIP:
ama güvenlik önlemleri nedeniyle, 200 değil 405 yanıtı veriyor. post methodunu desteklemiyor.
çalışan basit bir örnek ile bağlanabilirsin;
$url = "https://earsivportal.efatura.gov.tr/";
$curl = curl_init($url);
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false
));
$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$error = curl_errno($curl) . ': ' . curl_error($curl);
curl_close($curl);
echo $response;
Maalesef sonuç değişmedi hocam. Verbose => true kullaninca aşağıdaki çıktıyı alıyorum ayrıca.
* Trying 212.133.164.81:443...
* Connected to earsivportal.efatura.gov.tr (212.133.164.81) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* error:0A000152:SSL routines::unsafe legacy renegotiation disabled
* Closing connection 0
CURLOPT_SSLVERSION
kullanarak ssl versiyonunu değiştirmeyi deneyin, varsayılan sıfırdır. daha detaylı hata dönmesi içinde CURLOPT_VERBOSE
kullanabilirsiniz.
CURL_SSLVERSION_DEFAULT (0),
CURL_SSLVERSION_TLSv1 (1),
CURL_SSLVERSION_SSLv2 (2),
CURL_SSLVERSION_SSLv3 (3),
CURL_SSLVERSION_TLSv1_0 (4),
CURL_SSLVERSION_TLSv1_1 (5) veya CURL_SSLVERSION_TLSv1_2 (6) sabitlerinden biri. Azami TLS sürümü CURL_SSLVERSION_MAX_* sabitlerinden biri kullanarak atanabilir. CURL_SSLVERSION_* sabitlerinden biri ile CURL_SSLVERSION_MAX_* sabitlerinden birini VEYAlamak da mümkündür. CURL_SSLVERSION_MAX_DEFAULT (kütüphane tarafından desteklenen en büyük sürüm), CURL_SSLVERSION_MAX_TLSv1_0, CURL_SSLVERSION_MAX_TLSv1_1, CURL_SSLVERSION_MAX_TLSv1_2 veya CURL_SSLVERSION_MAX_TLSv1_3.
En iyi seçiminiz, bunu ayarlamamak ve öntanımlıyı kullanmasına izin vermektir. Bunu 2 veya 3 olarak ayarlamak, SSLv2 ve SSLv3'teki bilinen güvenlik açıkları göz önüne alındığında çok tehlikelidir.