Я относительно новичок в php с curl и хотел задать вопрос проверки работоспособности.
Я пытаюсь отправить XML-файл на сервер https с сертификатом в формате DER, предоставленным администратором сервера. Я также успешно конвертировал файл DER в формат ascii PEM и получаю по существу ту же ошибку.
With PEM format:
* unable to use client certificate (no key found or wrong pass phrase?)
With DER format:
cURL Error (58): unable to set private key file:
With DER I use: CURLOPT_SSLCERTTYPE => "DER"
Мои исследования показывают, что PHP curl также нуждается в файле ключа в формате PEM или, по крайней мере, в парольной фразе. Администратор сервера должен будет предоставить мне одно или другое.
Мне известно об устаревшей проблеме с curl на Centos и некоторых linux-боксах, и я обновил curl до последней версии:
curl 7.40.0 (x86_64-redhat-linux-gnu) libcurl/7.40.0 OpenSSL/1.0.1e zlib/1.2.3 c-ares/1.10.0 libidn/1.18 libssh2/1.4.3
Права доступа к моим файлам cer и pem r--r--r--
Правильно ли я вернул информацию об отсутствующем ключе или есть способ сделать такое сообщение на сервере https только с сертификатом DER или PEM? Любое понимание высоко ценится.
Вот сердце моего php-скрипта:
$ch = curl_init();
$options = array(
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => ['Content-Type:', 'text/xml'],
CURLOPT_POSTFIELDS => $testorder,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSLCERTTYPE => "DER", // commented out for PEM version
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => $url,
CURLOPT_SSLCERT => $cert_file,
);
curl_setopt_array($ch , $options);
$output = curl_exec($ch);
Похоже, вы устанавливаете параметры для аутентификации сертификата клиента, но предоставляете файл PEM только с открытым ключом, но без личного ключа. Вам также нужен личный ключ.
Других решений пока нет …