windows - PHP cURL bekræft SSL certifikat

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive kode for at hente sider enten via HTTP eller HTTPS.


<?php
$ch = curl\_init('https://www.google.com');

// <START OPTIONS>
// Uncomment the following line to "fix" error 60: "SSL certificate problem: unable to get local issuer certificate"
//curl\_setopt($ch, CURLOPT\_SSL\_VERIFYPEER, false);

// These options make no difference
curl\_setopt($ch, CURLOPT\_SSL\_VERIFYPEER, 1);
curl\_setopt($ch, CURLOPT\_SSL\_VERIFYHOST, 2);
curl\_setopt($ch, CURLOPT\_CAINFO, 'C:/server/cacert.pem');

// This changes error 60 to error 58: "unable to set private key file: 'C:/server/cacert.pem' type PEM"
curl\_setopt($ch, CURLOPT\_SSLCERT, 'C:/server/cacert.pem');
// <END OPTIONS>

if (curl\_exec($ch) === false) {
  var\_dump(curl\_errno($ch), curl\_error($ch));
}
curl\_close($ch);


Jeg har fulgt rådene i dette svar om at tilføje en cacert.pem fil til php.ini, men jeg får stadig fejl 60. Jeg tror, ​​at det her er, hvad optionen CURLOPT\_CAINFO også gør.


Hvis jeg inkludere curl\_setopt($ch, CURLOPT\_SSL\_VERIFYPEER, false); fungerer det, men kun ved at omgå sikkerhedskontrollen.


cURL indstillinger fra php -i:


curl

cURL support => enabled
cURL Information => 7.42.1
Age => 3
Features
AsynchDNS => Yes
Debug => No
GSS-Negotiate => No
IDN => No
IPv6 => Yes
Largefile => Yes
NTLM => Yes
SPNEGO => Yes
SSL => Yes
SSPI => Yes
krb4 => No
libz => Yes
CharConv => No
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host => i386-pc-win32
SSL Version => OpenSSL/0.9.8zf
ZLib Version => 1.2.7
libSSH Version => libssh2/1.5.0


cURL indstillinger fra phpinfo():


curl

cURL support    enabled
cURL Information    7.42.1
Age 3
Features
AsynchDNS   Yes
Debug   No
GSS-Negotiate   No
IDN No
IPv6    Yes
Largefile   Yes
NTLM    Yes
SPNEGO  Yes
SSL Yes
SSPI    Yes
krb4    No
libz    Yes
CharConv    No
Protocols   dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host    i386-pc-win32
SSL Version OpenSSL/1.0.1e
ZLib Version    1.2.7
libSSH Version  libssh2/1.5.0


Indstillingerne er identiske med undtagelse af SSL Version => OpenSSL/0.9.8zf (CLI) SSL Version OpenSSL/1.0.1e (CGI)


Min udviklingsmaskine er Windows XP, PHP 5.4.45, men når jeg får det til at arbejde, vil jeg overføre det til en Linux-server.


Skal jeg konfigurere php.ini forskelligt eller bruge forskellige cURL-muligheder? Hvordan kan jeg få cURL til at lykkes kun, hvis webstedet er korrekt underskrevet, dvs. med curl\_setopt($ch, CURLOPT\_SSL\_VERIFYPEER, true);?

Bedste reference