CURL SSL sayfasını okuma (php)

6 Cevap php

Ben php ve curl kütüphaneleri kullanarak güvenli (https kullanır) web sayfasının içeriğini indirmek için çalışıyorum.

Ancak, başarısız ve ben hata 60 olsun okuma: "SSL sertifikası sorunu, CA sertifika Tamam olduğunu doğrulayın."

Ayrıca "Detaylar: SSL3_GET_SERVER_CERTIFICATE: Sertifika doğrulama başarısız oldu"

Yani ... güzel kendini açıklayıcı hata msg.

Benim soru: Nasıl bir SSL sertifikası (? Doğru bir) göndermek ve bu sayfayı bunu doğrulamak için ve bana izin alabilirim?

Ayrıca, burada merak ediyor durumda benim seçenekleri dizidir:

    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        CURLOPT_SSL_VERIFYHOST => 1,
    );

Any suggestions would be great, Andrew

6 Cevap

Eğer hata misinterpreting olabilir gibi geliyor. Eğer bağlandığınız site kendinden imzalı veya diğer bazı yaygın bir sorundur gibi görünüyor bana. Sadece her zamanki tarayıcı uyarı gibi, etrafında en kolay iş kontrolleri devre dışı bırakmak için konum.

Sen CURLOPT_SSL_VERIFYPEER ve CURLOPT_SSL_VERIFYHOST olarak ayarlamanız gerekir FALSE. Bu iki ana kontrolleri devre dışı bırakmanız gerekir. Her ikisi de gerekli olmayabilir, ama bu en azından gitmeliyiz.

To be clear, this disables a feature designed to protect you. Only do this if you have verified the certificate and server by some other means.

Daha detaylı bilgi PHP sitede: curl_setopt()

SSL akran doğrulaması (kapatarak her zaman iyi bir fikir değildir) kullanmak isterseniz, genel olarak tüm uygulamalar için Windows sonraki çözümü kullanabilirsiniz:

  1. Download file with root certificates from here: http://curl.haxx.se/docs/caextract.html
  2. Php.ini ekle:

curl.cainfo=C:/path/to/cacert.pem

hepsi büyü, CURL şimdi sertifikalarını kontrol edebilirsiniz.

(as I know there is no such problem on Linux, at least on Ubuntu)

Hatta SO tavsiye izledikten sonra .. Hala gibi bir hata ile ilgili sorunlar olabilir:

error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

Sorun SSL sürümü ile. 3 sürümünde aşağıdaki kullanın

curl_setopt($ch, CURLOPT_SSLVERSION,3)

Ben u de eş ve ev sahibi doğrulama etkin ve gerçek bir sertifika dosyasına işaret olduğunu varsayarak yaşıyorum. Örn.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");

Bu openssl ve VeriSign ile bir "sorun" dur.

Ben benzer bir sorun vardı ve benim openssl sunucu sertifikasını imzalamak için VeriSign tarafından kullanılan ara ssl sertifikası eksikti.

https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657

Benim yerel ca-sertifikalar listesine VeriSign Ana veya Firefox sertifika veritabanı ihracatı bu ara sertifikaları almak için vardı ve bu adımdan sonra ben herhangi bir hata olmadan korumalı bir bağlantı kullanmak için wget / curl kullanmak mümkün oldu.

Bu openssl hata üzerinde görünüşe göre. Tomcat mevcut şifre listesini kısıtlayarak tarafından / etc/tomcat7/server.xml Bu geçici bir çözüm için yapılandırılabilir:

<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>

Sen SSL sertifikası gönderme değil. Bu size temas vardır host üzerinde yüklü olarak SSL sertifikası ile bir sorun var görünür. Şikayet geçmiş olsun, güvensiz - opsiyon-k ya kullanın.

Ah. Ryan Graham'ın cevaba bakınız