Соединение PHP TCP с API EPP с использованием аутентификации SSL-сертификата

Я пробовал это вверх и назад без какого-либо успеха. Национальный отдел регистрации доменов решил изменить всю свою систему на EPP. Их документация очень плохая, но подведу итог:

  • Соединение через TCP: epptest.ficora.fi порт 700
  • Чтобы добавить в белый список брандмауэра, добавьте IP-адрес и SSL-сертификат в учетную запись пользователя на панели управления (готово)

Приборная панель — полный беспорядок. Я не могу загрузить один и тот же сертификат разным пользователям, я не могу удалить пользователей и т. Д. В любом случае, вы должны подключиться к этому адресу и проверить себя, используя тот же сертификат SSL в запросе (по крайней мере, это то, что я понял), но я не могу заставить его работать. Все мои запросы возвращаются:

Error 7: "Failed to connect to epptest.ficora.fi port 700: Timed out"

Я создал XML для входа в систему на основе документации, которую я отправил в запросе POST.

    ini_set('max_execution_time', 300);
set_time_limit(0);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, 'epptest.ficora.fi');
curl_setopt($curl, CURLOPT_PORT, 700);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($curl, CURLOPT_TIMEOUT, 400);
curl_setopt($curl, CURLOPT_SSLCERT, __DIR__ . '/certificate.crt');

$output = curl_exec($curl);
echo 'Error ' . curl_errno($curl) . ': "' . curl_error($curl) .'"';
curl_close($curl);

Файл сертификата можно найти, я выполнил тест file_get_contents () и читает OK. Это локальный тест на компьютере с Windows.

Тестируя тот же код на моем (живом) сервере, я получаю:

Error 56: "Recv failure: Connection reset by peer"

Я не знаю, звучит ли это глупо или нет, но должен ли запрос исходить с сервера, с адреса, где используется SSL-сертификат?

Я в полной растерянности с этим относительно того, почему это не работает. Помогите кому-нибудь?

РЕДАКТИРОВАТЬ

Here's the cURL verbose information:

* About to connect() to epptest.ficora.fi port 700 (#0)
* Trying <ip_address>
* connected
* Connected to epptest.ficora.fi (<ip address>) port 700 (#0)
> POST / HTTP/1.1
Host: epptest.ficora.fi:700
Accept: */*
Content-type: text/xml
Content-length: 146

* upload completely sent off: 146 out of 146 bytes
* additional stuff not fine transfer.c:1037: 0 0
* Recv failure: Connection reset by peer
* Closing connection #0

2

Решение

Ответ в конце концов пришел ко мне через другого Stackoverflow сообщение. У меня фактически не было закрытого ключа в сертификате, поэтому мне нужно было создать новый файл .pem (просто текст в любом редакторе) и вставить в него закрытый ключ и сертификат следующим образом:

-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE----

-----END CERTIFICATE-----

В сертификате должен быть ключ. Все, что у меня было, было их отдельным. Никто на самом деле не указал на это.

ТЕМ НЕ МЕНИЕ! Я не смог сделать эту работу в cURL. Я получил ответ через библиотеку PHP-EPP, которая использует функцию stream_socket_client ().

1

Другие решения

Я видел два вида ошибок из файла epptest.ficora:

  • Тайм-аут подключения указывает, что IP-адрес не разрешен для подключения.

  • Сброс соединения по пиру означает, что сертификат недействителен.

В эти выходные все мои соединения потерпели неудачу из-за сброса соединения другим пользователем. Сегодня (29.8.2016) он снова начал работать, так что это, вероятно, временная проблема. До сих пор я видел успешную аутентификацию с сертификатами сервера CAcert и сертификатами Comodo FreeSSL.

Однако IP-адрес, который я включил два дня назад, все еще заблокирован. Возможно, что автоматическое обновление брандмауэра каждые 8 ​​часов не работает так, как описано в документации, и вам нужно связаться со службой поддержки Ficora ([email protected]), чтобы открыть IP-адрес.

Кроме того, я не верю, что curl поддерживает EPP, поэтому в этом случае он, вероятно, бесполезен. (EPP — это специальный протокол, используемый через TCP-порт 700. Он не основан на HTTP.)

1

По вопросам рекламы [email protected]