PHP 使用 SSL 证书身份验证到 EPP API 的 TCP 连接
PHP TCP connection to EPP API using SSL certificate authentication
我试过这个向上和向后都没有成功。国家域名注册部门已决定将其整个系统更改为 EPP。他们的文档很差,但总结一下:
- 通过 TCP 连接:epptest.ficora.fi 端口 700
- 要将 IP 地址和 SSL 证书添加到仪表板上的用户帐户(完成)
仪表板一团糟。我无法将相同的证书上传给不同的用户,我无法删除用户等。无论如何,您应该连接到该地址并在请求中使用相同的 SSL 证书来验证自己(至少这是我所理解的)但我无法让它工作。我所有的请求 return:
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()测试,读取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
我从 epptest.ficora fi:
中看到了两种错误
连接超时表示IP地址不允许连接。
对等方重置连接表明证书无效。
这个周末我的所有连接都失败了,连接被对等方重置。今天 (29.8.2016) 它又开始工作了,所以这可能是一个暂时的问题。到目前为止,我已经看到使用 CAcert 服务器证书和 Comodo FreeSSL 证书的成功身份验证。
但是,我前两天启用的IP地址仍然被阻止。他们每 8 小时自动更新一次的防火墙可能没有像记录的那样工作,您需要联系 Ficora 支持 (fi-domain-tech@ficora.fi) 来打开 IP。
此外,我认为 curl 不支持 EPP,因此在这种情况下它可能没有用。 (EPP 是在 TCP 端口 700 上使用的自定义协议。它不基于 HTTP。)
最后的答案是通过另一个Whosebug post找到的。我实际上在证书中没有私钥,所以我要做的是创建一个新的 .pem 文件(在任何编辑器中都是纯文本)并将私钥和证书粘贴到其中,如下所示:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----
-----END CERTIFICATE-----
证书中应该包含密钥。我所拥有的只是它们分开。没有人真正指出这一点。
然而!我无法在 cURL 中完成这项工作。我得到的响应是通过使用 stream_socket_client() 函数的 PHP-EPP 库。
我试过这个向上和向后都没有成功。国家域名注册部门已决定将其整个系统更改为 EPP。他们的文档很差,但总结一下:
- 通过 TCP 连接:epptest.ficora.fi 端口 700
- 要将 IP 地址和 SSL 证书添加到仪表板上的用户帐户(完成)
仪表板一团糟。我无法将相同的证书上传给不同的用户,我无法删除用户等。无论如何,您应该连接到该地址并在请求中使用相同的 SSL 证书来验证自己(至少这是我所理解的)但我无法让它工作。我所有的请求 return:
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()测试,读取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
我从 epptest.ficora fi:
中看到了两种错误连接超时表示IP地址不允许连接。
对等方重置连接表明证书无效。
这个周末我的所有连接都失败了,连接被对等方重置。今天 (29.8.2016) 它又开始工作了,所以这可能是一个暂时的问题。到目前为止,我已经看到使用 CAcert 服务器证书和 Comodo FreeSSL 证书的成功身份验证。
但是,我前两天启用的IP地址仍然被阻止。他们每 8 小时自动更新一次的防火墙可能没有像记录的那样工作,您需要联系 Ficora 支持 (fi-domain-tech@ficora.fi) 来打开 IP。
此外,我认为 curl 不支持 EPP,因此在这种情况下它可能没有用。 (EPP 是在 TCP 端口 700 上使用的自定义协议。它不基于 HTTP。)
最后的答案是通过另一个Whosebug post找到的。我实际上在证书中没有私钥,所以我要做的是创建一个新的 .pem 文件(在任何编辑器中都是纯文本)并将私钥和证书粘贴到其中,如下所示:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----
-----END CERTIFICATE-----
证书中应该包含密钥。我所拥有的只是它们分开。没有人真正指出这一点。
然而!我无法在 cURL 中完成这项工作。我得到的响应是通过使用 stream_socket_client() 函数的 PHP-EPP 库。