v2.5.2
Giriş yap

cURL Hatası (35) - Yardım Lütfen

cemcanpolat
1,366 defa görüntülendi

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);
Cevap yaz
Cevaplar (8)
munzevi
657 gün önce

@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

cemcanpolat
663 gün önce

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;
mehmetbeys
663 gün önce

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.

munzevi
664 gün önce

php sürümüm 7.4.28.

cemcanpolat
664 gün önce

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?

munzevi
664 gün önce

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;
cemcanpolat
664 gün önce

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
munzevi
664 gün önce

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.