у меня есть curl
команда, которая отлично работает из командной строки, которая выглядит так:
curl --cert /path/to/cert.pem \
--cert-type PEM \
--form "files[0]=@/path/to/file.csv" \
https://url.com/whatever
Я также могу запустить его успешно с помощью PHP
exec("curl --cert /path/to/cert.pem --cert-type PEM --form \"files[0]=@/path/to/file.csv\" https://url.com/whatever");
Переводя команду в php-curl я получил
$url = "https://url.com/whatever";
$certificate = "/path/to/cert.pem";
$filePath = "/path/to/file.csv";
$postData = array("files[0]" => "@".$filePath);
// Upload request
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSLCERT, $certificate);
curl_setopt($ch, CURLOPT_SSLCERTTYPE, "PEM");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// I have tried WITH or WITHOUT the following options to no avail
// Note that SSL_VERIFYPEER false is not necessary -- I do not have a self-signed cert in the chain
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$postUploadResponse = curl_exec($ch);
и это не работает. Я получаю сообщение от сервера о том, что аутентификация не удалась и мой сертификат недействителен (хотя тот же сертификат работает из строки cmd).
Важная деталь: эта функция работает отлично (с SSL_VERIFYPEER
false, поскольку я использую самоподписанный сертификат локально) из моей локальной установки XAMPP, но тот же код не выполняется на сервере.
Сервер находится на Debian 8.3.
curl --version
является
curl 7.38.0 (x86_64-pc-linux-gnu) libcurl/7.38.0 OpenSSL/1.0.1k zlib/1.2.8 libidn/1.29 libssh2/1.4.3 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API SPNEGO NTLM NTLM_WB SSL libz TLS-SRP
Что может быть причиной этого ? Есть ли что-то, что может привести к неправильной отправке моего сертификата при использовании libcurl
?
Задача ещё не решена.
Других решений пока нет …