CURL и ssl

  • Автор темы Автор темы zerkms
  • Дата начала Дата начала

zerkms

TDD infected
Команда форума
Господа, есть такой вот тестовый код:
PHP:
$handle = curl_init();
$options = array( 
                  CURLOPT_RETURNTRANSFER => false,
                  CURLOPT_HEADER         => true,
                  CURLOPT_FOLLOWLOCATION => false,
                  CURLOPT_SSL_VERIFYHOST => 0,
                  CURLOPT_SSL_VERIFYPEER => false,
                  CURLOPT_SSLCERT         => dirname(__FILE__) . '/file.crt',
                  CURLOPT_SSLCERTPASSWD     => 'passwd',
                  CURLOPT_SSLCERTTYPE => 'PEM',
                  CURLOPT_USERAGENT      => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
                  CURLOPT_VERBOSE        => true,
                  CURLOPT_URL            => 'https://192.168.132.72:444'
           );

curl_setopt_array($handle, $options);
$response = curl_exec($handle);
if (curl_errno($handle)) {
  echo 'Error: ' . curl_error($handle);
}

var_dump($response);

curl_close($handle);

Результат выполнения:

PHP:
Error: unable to set private key file: '/var/www/localhost/htdocs/file.crt' type PEM

Теперь откуда у меня этот сертификат взялся: мне прислали файл .p12, который я импортнул в ФФ, затем произвёл экспорт в формате PEM (пробовал и DER)

Пароль - тот же самый, который указывается при импорте p12

При этом фф нормально заходит по адресу.


Мысли?
 
Мож того, банально прав нет на чтение файла с сертификатом?
 
А в PEM файлике точно лежит и ключ и сертификат?
Причем, если не ошибаюсь, порядок важен: сначала ключ, потом сертификат:
-----BEGIN RSA PRIVATE KEY-----
[ букавки ]
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
[ букавки ]
-----END CERTIFICATE-----
 
У меня там лежит просто -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----

А ключ как получить? Потому что браузер с ними вполне себе работает окейно
 
Не, если тебе не нужен ключ, а нужен только клиентский сертификат, тогда тебе не нужен и пароль — поскольку пароль от закрытого ключа, а не от сертификата.
 
Я хз что там в браузере. Но нужны оба блока - RSA PRIVATE KEY (приватный ключ) и CERTIFICATE.
В .p12 хранятся оба. Нафиг браузером что-то делать, openssl pkcs12 -in file.p12 -out file.pem -nodes или как то так
 
Всё, разрулил.

На линуксе получил сертификат из этого p12, и сразу всё завелось

В итоговом файле 2 блока BEGIN CERTIFICATE и 1 BEGIN RSA PRIVATE KEY

И ещё какие-то атрибуты
 
Сверху