Я разрабатываю php-клиент для взаимодействия с сервером Nominet EPP, и, как я обнаружил на их веб-сайте:http://registrars.nominet.uk/namespace/uk/registration-and-domain-management/registrar-systems/epp/registration
Мне нужно использовать корневой сертификат Verisign Class 3 Public Primary Certification Authority. Я нашел один здесь (Verisign куплен Symantec): https://knowledge.symantec.com/support/mpki-for-ssl-support/index?page=content&ID = SO5624&АСТР = LIST&viewlocale = ru
Когда я использую его в своем PHP-коде:
//$context = stream_context_create(array($this->protocol => $options));
$context = stream_context_create();
stream_context_set_option($context, $this->protocol, 'local_cert', __DIR__ . '/../../certificates/'.$this->certificate_path);
$errno = false;
$errstr = false;
$this->socket = stream_socket_client($this->protocol.'://'.$this->hostname.':'.$this->port, $errno, $errstr, 5 , STREAM_CLIENT_CONNECT, $context);
Все в порядке: путь сертификата, порт, имя хоста …
И я получаю:
"stream_socket_client(): Unable to set private key file ..."
Я знаю, что мне нужен закрытый ключ, но на сайте Symentec они не дают закрытый ключ.
У кого-нибудь есть идеи?
Спасибо,
Hassan,
Вы не используете правильный контекстный вариант. Эта опция предназначена для определения вашего сертификата. Вам нужно использовать сертификат, который вы нашли, для аутентификации равноправного сервера, чтобы убедиться, что вы действительно говорите с правильным.
Как сказано в этом:
Для проверки личности защищенного сервера вам понадобится
Корень Verisign Class 3 Public Primary Certification Authority.
Сертификат доступен бесплатно на сайте www.verisign.com (сертификат
также распространяется с большинством веб-браузеров).
На PHP Doc:
local_cert
строка Путь к локальному файлу сертификата в файловой системе. Это
должен быть файл в кодировке PEM, который содержит ваш сертификат и личный
ключ.
Но то, что вы хотите, это:
cafile
Расположение файла центра сертификации в локальной файловой системе, которая
должен использоваться с опцией контекста verify_peer для аутентификации
личность удаленного пира.
Других решений пока нет …