Heim  >  Artikel  >  Backend-Entwicklung  >  Greifen Sie mit CURL in PHP auf HTTPS zu

Greifen Sie mit CURL in PHP auf HTTPS zu

小云云
小云云Original
2018-03-30 15:26:486213Durchsuche

In diesem Artikel erfahren Sie hauptsächlich, wie Sie CURL in PHP für den Zugriff auf HTTPS verwenden. Ich hoffe, dass er allen helfen kann.

Der Einfachheit halber beginnen wir mit dem Code~ Dies ist eine heute neu verpackte Funktion

/**
 * curl POST
 *
 * @param	string  url
 * @param	array   数据
 * @param	int     请求超时时间
 * @param	bool    HTTPS时是否进行严格认证
 * @return	string
 */
function curlPost($url, $data = array(), $timeout = 30, $CA = true){  

    $cacert = getcwd() . '/cacert.pem'; //CA根证书
    $SSL = substr($url, 0, 8) == "https://" ? true : false;
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);
    if ($SSL && $CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
    } else if ($SSL && !$CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //避免data数据过长问题
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode

    $ret = curl_exec($ch);
    //var_dump(curl_error($ch));  //查看报错信息

    curl_close($ch);
    return $ret;  
}

Wenn die URL-Adresse mit https beginnt, verwenden Sie SSL, andernfalls verwenden Sie das normale HTTP-Protokoll .

Ist die Verwendung von HTTPS sicher? Tatsächlich verfügt SSL auch über verschiedene Verifizierungsstufen.

Muss ich beispielsweise den allgemeinen Namen im Zertifikat überprüfen? (Übrigens bedeutet „Common Name“ im Allgemeinen das Ausfüllen des Domänennamens (Domain) oder Subdomainnamens (Subdomain), für den Sie ein SSL-Zertifikat beantragen möchten.)

Brauchen Sie? um den Hostnamen zu überprüfen?

Vertrauen Sie irgendeinem Zertifikat oder nur denen, die von der Zertifizierungsstelle ausgestellt wurden?

(Ich habe es gelöscht, der Akku ist fast leer, ich habe nur die wichtigsten Punkte erwähnt - -|||)

Wenn das Website-SSL-Zertifikat von einer Zertifizierungsstelle gekauft wird (normalerweise teurer) , dann können Sie beim Zugriff eine strengere Authentifizierung verwenden, d Zugriff Es wird nicht übergeben und gibt direkt false zurück. (Übrigens, wenn false zurückgegeben wird, können Sie curl_error($ch) drucken, um die spezifische Fehlermeldung anzuzeigen.) Zu diesem Zeitpunkt können Sie die Überprüfungsstufe entsprechend der Situation reduzieren, um einen normalen Zugriff sicherzustellen, zum Beispiel:

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配

Normalerweise verwenden wir einen Browser. Beim Besuch verschiedener https-Websites werden Sie manchmal auf die Meldung stoßen, dass das Zertifikat nicht vertrauenswürdig ist. Dies liegt tatsächlich daran, dass die Zertifikate dieser Websites nicht von offiziellen Zertifizierungsstellen ausgestellt werden.

Verschiedene Browser auf dem Markt verfügen über integrierte CA-Stammzertifikatslisteninformationen. Beim Besuch von Websites mit von einer Zertifizierungsstelle ausgestellten Zertifikaten werden die Zertifikate dieser Websites anhand des Stammzertifikats überprüft, sodass diese Eingabeaufforderung nicht angezeigt wird .
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)

Was die CA-Stammzertifikatdatei betrifft, so enthält sie tatsächlich die öffentlichen Schlüsselzertifikate jeder großen CA-Organisation, die verwendet wird, um zu überprüfen, ob das Zertifikat der Website von diesen Organisationen ausgestellt wurde.

Die Datei hier wurde aus dem Quellbaum von Mozilla abgeleitet und in eine Zertifikatsdatei im PEM-Format konvertiert. (Sie können das fertige Dokument hier herunterladen: http://curl.haxx.se/ca/cacert.pem)

Lassen Sie uns zum Schluss über etwas sprechen, das nichts mit SSL zu tun hat:


Verwandte Empfehlungen:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

PHP verwendet Curl, um auf https-Beispielcode zuzugreifen

Das obige ist der detaillierte Inhalt vonGreifen Sie mit CURL in PHP auf HTTPS zu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn