Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSL证书身份验证与EPP API的PHP TCP连接_Php_Ssl_Tcp_Epp - Fatal编程技术网

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

使用SSL证书身份验证与EPP API的PHP TCP连接,php,ssl,tcp,epp,Php,Ssl,Tcp,Epp,我反复尝试过,但没有成功。国家域名注册局已决定将其整个系统改为EPP。他们的文档很差,但概括起来: 通过TCP连接:epptest.ficora.fi端口700 要创建防火墙的白名单,请将IP地址和SSL证书添加到仪表板上的用户帐户(完成此操作) 仪表盘乱七八糟。我无法将同一证书上载到不同的用户,我无法删除用户等。无论如何,您应该连接到该地址,并在请求中使用相同的SSL证书验证您自己(至少我知道这一点),但我无法让它工作。我所有的请求都返回: Error 7: "Failed to conn

我反复尝试过,但没有成功。国家域名注册局已决定将其整个系统改为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\u get\u 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端口700(#0)
*尝试
*连接的
*已连接到epptest.ficora.fi()端口700(#0)
>POST/HTTP/1.1
主持人:epptest.ficora.fi:700
接受:*/*
内容类型:text/xml
内容长度:146
*上传已完全发送:146字节中的146字节
*附加材料未精细转移。c:1037:0
*Recv故障:对等方重置连接
*正在关闭连接#0

我在epptest.ficora fi中看到了两种错误:

  • 连接超时表示不允许连接IP地址

  • 对等方重置连接表示证书无效

这个周末,我所有的连接都失败了,因为对等方重置了连接。今天(2016年8月29日),它再次开始工作,因此这可能是一个暂时的问题。到目前为止,我已经看到使用CAcert服务器证书和Comodo FreeSL证书成功进行身份验证

但是,我两天前启用的IP地址仍然被阻止。有可能他们每8小时自动更新一次的防火墙并没有按照文档记录的那样工作,您需要联系Ficora支持(fi域)-tech@ficora.fi)打开IP


另外,我不相信curl支持EPP,所以在这种情况下它可能没有用处。(EPP是通过TCP端口700使用的自定义协议。它不是基于HTTP的。)

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

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

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

-----BEGIN CERTIFICATE----

-----END CERTIFICATE-----
证书中应该有密钥。我所能做的就是把它们分开。实际上没有人指出这一点


然而!我无法在卷曲中完成这项工作。我得到的回应是通过一个使用stream\u socket\u client()函数的PHP-EPP库得到的。

我已经联系过他们了,他们完全是白痴。实际上,我已经被指示使用“私有证书”以CRT或PRM格式验证自己,在我确认它们是指私钥之前,我对这个术语完全不熟悉。不幸的是,我检查过的任何EPP连接库都没有使用私钥,但是“local_cert”只能引用证书文件,我不明白您如何使用它来验证自己。您是否有任何关于您应该发送哪些文件的信息?我尝试了CURLOPT_SSLKEY,但没有成功发送私钥。哦,在他们的消息中,他们说整个周末都有配置错误,所以你的问题一定是这个。然而,我无法以任何方式证实我自己。如果你有一些关于我应该传递的文件的输入,那就太好了!您应该知道EPP协议不使用HTTP,所以CURL可能不会有多大帮助。它直接通过TCP端口700使用自定义协议工作。(对不起,我本可以早一点提到这一点。)