【问题标题】:PHP TCP connection to EPP API using SSL certificate authentication使用 SSL 证书身份验证的 PHP TCP 连接到 EPP API
【发布时间】:2017-01-02 07:55:34
【问题描述】:

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

  • 通过 TCP 连接:epptest.ficora.fi 端口 700
  • 要将防火墙列入白名单,请将 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() 测试并读取 OK。这是 Windows 计算机上的 localhost 测试。

在我自己的(实时)服务器上测试相同的代码:

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

【问题讨论】:

    标签: php ssl tcp epp


    【解决方案1】:

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

    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    
    -----BEGIN CERTIFICATE----
    
    -----END CERTIFICATE-----
    

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

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

    【讨论】:

    • 您应该知道 EPP 协议不使用 HTTP,因此 CURL 可能不会有太大帮助。它直接在 TCP 端口 700 上使用自定义协议工作。(抱歉,我之前可以提到这一点。)
    【解决方案2】:

    我从 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。)

    【讨论】:

    • 我已经联系过他们,他们完全是白痴。实际上,我被指示使用“私人证书”以 CRT 或 PRM 格式验证自己,在我确认它们的意思是 PRIVATE KEY 之前,我完全不熟悉这个术语。不幸的是,我检查过的没有 EPP 连接库使用私钥,但“local_cert”只能引用证书文件,我不明白你如何用它来验证自己。您对您应该发送哪些文件有任何意见吗?我试过 CURLOPT_SSLKEY 却没有发送私钥。
    • 哦,在他们的消息中,他们说整个周末都有配置错误,所以你的问题一定是那个。但是,我无法以任何方式验证自己。如果您对我应该传递的文件有一些意见,那就太好了!
    猜你喜欢
    • 2012-05-10
    • 2013-08-04
    • 1970-01-01
    • 2016-03-26
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2015-04-01
    相关资源
    最近更新 更多