2015-12-08 3 views
1

Я пытаюсь использовать бесплатный клиентский сертификат cacert.org в curl call. проверьте следующее ...Клиентский сертификат на вызов EPP

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://url.com'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.crt'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

Я скачал сертификат как PEM, теперь я получаю следующее сообщение об ошибке ...

unable to set private key file: 'cert.crt' type PEM 

Я попробовал весь путь, но не мог исправить, попробовал Google, а также. Пожалуйста помоги.

+0

Когда вы экспортировали сертификат, он включал закрытый ключ? – drew010

+0

@ drew010 Нет, даже я купил платный ssl от comodo, но это тоже не решило мою проблему. – seoppc

+0

Что вы пытаетесь сделать?'CURLOPT_SSLCERT' предназначен для указания сертификата проверки подлинности клиента, который используется для аутентификации на удаленном сервере. Некоторые CA используют их вместо паролей для входа в систему для управления вашей учетной записью, но сертификаты клиентов не являются слишком распространенными. Вместо этого вы ищете 'CURLOPT_CAINFO'? – drew010

ответ

0

Я считаю, что проблема в том, что ваш файл сертификата делает не содержит закрытый ключ, и он не поставляется отдельно, используя CURLOPT_SSLKEY вариант, который указывает на соответствующий закрытый ключ сертификата.

Я предполагаю, что сертификат был выдан вам из ЦС и установлен в вашем браузере. Когда это происходит, закрытый ключ хранится браузером в безопасном месте отдельно от сертификата (зависит от браузера ОС &).

Большинство браузеров не позволят вам экспортировать сертификат и закрытый ключ без его шифрования (предоставление пароля). Но на основе содержимого вашего файла PEM не существует соответствующего закрытого ключа.

Чтобы решить эту проблему вам, возможно, придется пройти несколько этапов:

  • Экспортируйте CERT из браузера снова и убедитесь, что он включает в себя закрытый ключ
  • Chrome на Win/Linux и Интернет Проводник в Windows потребует ввода пароля. Сертификат должен быть экспортирован как PKCS # 12 (P12)

Сейчас проблема заключается в том, что секретный ключ зашифрован, и он должен быть в незашифрованном виде для Curl, насколько я знаю,

  • Используйте openssl для дешифрования закрытого ключа и экспорта сертификата и ключа в формат PEM
  • openssl pkcs12 -in cert.p12 -nodes (при этом будет запрашиваться пароль, используемый для шифрования при экспорте из браузера) (cert.p12 является закрытым ключом cert & в формате PKCS12 . -nodes позволяет экспортировать закрытый ключ без шифрования)

Это будет печатать на стандартном выводе сертификат и ключ в формате PEM.

Вы должны увидеть две секции:

-----BEGIN PRIVATE KEY----- 
... 
-----END PRIVATE KEY----- 

и

-----BEGIN CERTIFICATE----- 
... 
-----END CERTIFICATE----- 

У Вас уже есть сертификат, скорее всего, но вы должны сохранить секретный ключ в другой файл. Поскольку он не зашифрован на сервере, старайтесь правильно установить разрешения, обычно 0400, так что другие пользователи не могут получить к нему доступ

+0

Спасибо, я попробую и дам вам знать. – seoppc

+0

Я экспортировал его правильно, и у меня есть закрытый ключ и два раздела сертификатов, какой сертификат я должен использовать? – seoppc

Смежные вопросы