使用 SSL 证书身份验证的 PHP TCP 连接到 EPP API

标签 php ssl tcp epp

我已经尝试过向上和向后,但没有成功。国家域名注册部门已决定将其整个系统更改为 EPP。他们的文档非常差,但总结一下:

  • 通过 TCP 连接:epptest.ficora.fi 端口 700
  • 要将 IP 地址和 SSL 证书添加到仪表板上的用户帐户(已完成),请将 IP 地址和 SSL 证书添加到防火墙白名单

仪表板一团糟。我无法将相同的证书上传给不同的用户,我无法删除用户等。无论如何,您应该连接到该地址并在请求中使用相同的 SSL 证书来验证自己(至少这是我所理解的),但我无法让它工作。我所有的请求返回:

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

我根据在 POST 请求中发送的文档创建了一个登录 XML。

    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() 测试并读取正常。这是 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

最佳答案

最后的答案是通过另一个Stackoverflow post给我的。 。实际上,我的证书中没有私钥,所以我必须做的是创建一个新的 .pem 文件(在任何编辑器中只是纯文本)并将私钥和证书粘贴到其中,如下所示:

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

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

-----BEGIN CERTIFICATE----

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

证书中应该包含 key 。我所拥有的只是他们分开。没有人真正指出这一点。

但是!我无法在 cURL 中完成这项工作。我得到的响应是通过使用stream_socket_client() 函数的PHP-EPP 库。

关于使用 SSL 证书身份验证的 PHP TCP 连接到 EPP API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152809/

相关文章:

ssl - Composer 自签名证书

python - POX - 安装一条规则,当某个数据包与 ofp_match 匹配时发送一个虚拟数据包

php - 语义错误 - 找不到常量 X,类...错误

ssl - 从特定域捕获数据包转储

ssl - 浏览器在代理后面被阻止(禁止)

.net - 如何在 ASP .NET 中获取客户端的临时端口号?

Java 通过 TCP 发送对象

javascript - 我如何在 javascript 代码中包含 php 文件

php - 如何摆脱主题窃取者?

PHP/JQUERY 标签在编辑按钮点击时循环输入