使用 CURL 的 FTPS PHP
FTPS with CURL PHP
我正忙于需要连接到 FTPS 服务器的 curl php 库。
我有这个半工作...如果我连接到 ftp://domain.com 那么它就可以工作。如果我使用 tcpflow 查看服务器上的通信,我会看到它使用 AUTH TLS 登录,并且所有通信都已加密。文件已上传,一切顺利..
我不确定尝试连接到 ftps://domain.com?
是否有效
我问的原因是因为如果我在 curl 中将协议从 ftp 更改为 ftps 则登录失败并且服务器(观看 tcpflow 通信)说登录有失败:
191.101.002.204.00021-088.099.012.154.51630: 530 Please login with USER and PASS.
此外,当我在尝试连接到 ftps:// 时观看通讯时,我没有看到客户端像使用普通 ftp 那样发出 AUTH TLS 命令:/ /
我遇到的问题是,我的客户的 FTP 我们最终必须连接的服务器似乎不允许在没有 ftps:// 协议的情况下进行连接。
如果我使用 lftp 连接,我可以使用 ftps:// 但是我必须禁用 ssl:
设置 ftp://ssl-allow 否
如果我使用 ftp:// 尝试 lftp 连接,它只会挂在登录命令上...
我对 FTP 或 TLS / SSL 不是很熟悉,所以我不知道这是否可能是因为客户端的服务器没有正确设置证书..
这是我的 curl 代码的一部分,它适用于 ftp:// 但不适用于 ftps://
// Works
$url = "ftp://proxy.plettretreat.co.za/";
// Does not work
$url = "ftps://proxy.plettretreat.co.za/";
$port = 990;
$username = "ftpuser";
$password = "pass";
$filename = "/test.php";
$file = dirname(__FILE__)."/test.php";
$c = curl_init();
// check for successful connection
if ( ! $c)
throw new Exception( 'Could not initialize cURL.' );
$options = array(
CURLOPT_USERPWD => $username.':'.$password,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_BINARYTRANSFER => 1,
CURLOPT_FTP_SSL => CURLFTPSSL_ALL, // require SSL For both control and data connections
CURLOPT_FTPSSLAUTH => CURLFTPAUTH_TLS, // let cURL choose the FTP authentication method (either SSL or TLS)
CURLOPT_UPLOAD => true,
CURLOPT_PORT => $port,
CURLOPT_TIMEOUT => 30,
);
我不确定的另一件事是我的客户给了我一个要连接的 IP 地址。IP 地址可以在 ftp 中使用吗?我还以为证书主要是证明一个域名?
tl;博士
1) 我可以使用 ftps://domain.com 通过 CURL PHP 进行连接吗?
2) 如果我可以在 curl 中使用 ftps://,那么如何让 curl 登录(发出 auth tls 命令)?
3) FTP 服务器可以仅使用 IP 地址使用 SSL / TLS 吗?
谢谢...
约翰
许多小时的挣扎使我得到了最终的答案。
部分答案是客户端服务器和 FTP 服务器有 "overly" 严格的防火墙规则阻止被动端口。
我收到以下错误:
错误编号:35;错误:SSL 连接错误。
错误 35 是因为防火墙规则。一旦这些都放松了,错误就消失了,但请注意,如果客户端计算机进行了 NAT,您也会看到此错误。如果是,则需要设置 curl 选项:
curl_setopt($c, CURLOPT_FTPPORT, '1.2.4.5' ); // 更改为您的实际 IP。
这告诉 FTP 服务器在哪里打开它的数据通道(而不是试图打开它到客户端服务器的内部地址)。
无论如何,一旦设置了防火墙和 FTPPORT 选项,我得到:
错误编号:30;错误:绑定(端口=0)失败:无法分配请求的地址
这个问题让我困惑了很长一段时间,因为一切看起来都是正确的。
我最终在这里和其他地方偶然发现了一些线程,这些线程讨论了旧版本的 Curl 使用 NSS 进行加密的问题。我检查了一下,我使用的是 libcurl 版本 7.19.7(大约 8 岁),果然它使用 NSS...
我使用本指南更新了我的 Curl:https://www.digitalocean.com/community/questions/how-to-upgrade-curl-in-centos6。
这将我更新为使用 OpenSSL 的 libcurl 7.52.1,瞧瞧,我的应用程序开始工作了...
因此,如果您在将 curl-ftp 连接到 FTPS 服务器时遇到问题,请检查 FTPPORT(被动 IP),如果您已进行 NAT,请检查你的防火墙,但最重要的是,检查你的卷曲:
<?php
print print_r(curl_version());
?>
我希望这对某人有所帮助..
我正忙于需要连接到 FTPS 服务器的 curl php 库。
我有这个半工作...如果我连接到 ftp://domain.com 那么它就可以工作。如果我使用 tcpflow 查看服务器上的通信,我会看到它使用 AUTH TLS 登录,并且所有通信都已加密。文件已上传,一切顺利..
我不确定尝试连接到 ftps://domain.com?
是否有效我问的原因是因为如果我在 curl 中将协议从 ftp 更改为 ftps 则登录失败并且服务器(观看 tcpflow 通信)说登录有失败:
191.101.002.204.00021-088.099.012.154.51630: 530 Please login with USER and PASS.
此外,当我在尝试连接到 ftps:// 时观看通讯时,我没有看到客户端像使用普通 ftp 那样发出 AUTH TLS 命令:/ /
我遇到的问题是,我的客户的 FTP 我们最终必须连接的服务器似乎不允许在没有 ftps:// 协议的情况下进行连接。
如果我使用 lftp 连接,我可以使用 ftps:// 但是我必须禁用 ssl: 设置 ftp://ssl-allow 否
如果我使用 ftp:// 尝试 lftp 连接,它只会挂在登录命令上...
我对 FTP 或 TLS / SSL 不是很熟悉,所以我不知道这是否可能是因为客户端的服务器没有正确设置证书..
这是我的 curl 代码的一部分,它适用于 ftp:// 但不适用于 ftps://
// Works
$url = "ftp://proxy.plettretreat.co.za/";
// Does not work
$url = "ftps://proxy.plettretreat.co.za/";
$port = 990;
$username = "ftpuser";
$password = "pass";
$filename = "/test.php";
$file = dirname(__FILE__)."/test.php";
$c = curl_init();
// check for successful connection
if ( ! $c)
throw new Exception( 'Could not initialize cURL.' );
$options = array(
CURLOPT_USERPWD => $username.':'.$password,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_BINARYTRANSFER => 1,
CURLOPT_FTP_SSL => CURLFTPSSL_ALL, // require SSL For both control and data connections
CURLOPT_FTPSSLAUTH => CURLFTPAUTH_TLS, // let cURL choose the FTP authentication method (either SSL or TLS)
CURLOPT_UPLOAD => true,
CURLOPT_PORT => $port,
CURLOPT_TIMEOUT => 30,
);
我不确定的另一件事是我的客户给了我一个要连接的 IP 地址。IP 地址可以在 ftp 中使用吗?我还以为证书主要是证明一个域名?
tl;博士
1) 我可以使用 ftps://domain.com 通过 CURL PHP 进行连接吗? 2) 如果我可以在 curl 中使用 ftps://,那么如何让 curl 登录(发出 auth tls 命令)? 3) FTP 服务器可以仅使用 IP 地址使用 SSL / TLS 吗?
谢谢...
约翰
许多小时的挣扎使我得到了最终的答案。
部分答案是客户端服务器和 FTP 服务器有 "overly" 严格的防火墙规则阻止被动端口。
我收到以下错误:
错误编号:35;错误:SSL 连接错误。
错误 35 是因为防火墙规则。一旦这些都放松了,错误就消失了,但请注意,如果客户端计算机进行了 NAT,您也会看到此错误。如果是,则需要设置 curl 选项:
curl_setopt($c, CURLOPT_FTPPORT, '1.2.4.5' ); // 更改为您的实际 IP。
这告诉 FTP 服务器在哪里打开它的数据通道(而不是试图打开它到客户端服务器的内部地址)。
无论如何,一旦设置了防火墙和 FTPPORT 选项,我得到:
错误编号:30;错误:绑定(端口=0)失败:无法分配请求的地址
这个问题让我困惑了很长一段时间,因为一切看起来都是正确的。
我最终在这里和其他地方偶然发现了一些线程,这些线程讨论了旧版本的 Curl 使用 NSS 进行加密的问题。我检查了一下,我使用的是 libcurl 版本 7.19.7(大约 8 岁),果然它使用 NSS...
我使用本指南更新了我的 Curl:https://www.digitalocean.com/community/questions/how-to-upgrade-curl-in-centos6。 这将我更新为使用 OpenSSL 的 libcurl 7.52.1,瞧瞧,我的应用程序开始工作了...
因此,如果您在将 curl-ftp 连接到 FTPS 服务器时遇到问题,请检查 FTPPORT(被动 IP),如果您已进行 NAT,请检查你的防火墙,但最重要的是,检查你的卷曲:
<?php
print print_r(curl_version());
?>
我希望这对某人有所帮助..