带CURL-PHP的FTPS

带CURL-PHP的FTPS,php,curl,ftps,Php,Curl,Ftps,我正忙于一个需要连接到FTPS服务器的curl php库 我有这个半工作。。。如果我连接到,它就可以工作了。如果我使用tcpflow查看服务器上的通信,我会看到它使用AUTH TLS登录,并且所有通信都是加密的。文件上传了,所以一切都很好 我不确定的是,尝试连接到是否有效ftps://domain.com? 我询问的原因是,如果我在curl中将协议从ftp更改为ftps,则登录失败,服务器(监视tcpflow通信)表示登录失败: 191.101.002.204.00021-088.099.012

我正忙于一个需要连接到FTPS服务器的curl php库

我有这个半工作。。。如果我连接到,它就可以工作了。如果我使用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://尝试lftp连接,它将挂起login命令

我对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地址来连接。。ftps中是否可以使用IP地址?我原以为证书主要是对域名的认证

tl;博士

1) 我能用吗ftps://domain.com 使用CURL-PHP进行连接? 2) 如果我可以在curl中使用ftps://in,那么如何让curl登录(发出auth-tls命令)? 3) FTP服务器能否仅使用IP地址的SSL/TLS

谢谢


约翰

经过长时间的挣扎,我终于找到了答案

部分原因是客户端服务器和FTP服务器具有“过于”严格的防火墙规则,阻止被动端口

我遇到了以下错误:

错误编号:35;错误:SSL连接错误

错误35是因为防火墙规则。一旦这些被放松,错误就消失了,但是作为一个注意事项,如果客户端机器被NAT'ed,您也会看到这个错误。如果是,您需要设置curl选项:

curl_setopt($c,CURLOPT_ftupport,'1.2.4.5');//更改为您的实际IP

这将告诉FTP服务器在何处打开其数据通道(而不是尝试将其打开到客户端服务器的内部地址)

无论如何,一旦设置了防火墙和FTPPORT选项,我就得到了:

错误号:30;错误:绑定(端口=0)失败:无法分配请求的地址

这件事让我困惑了好一阵子,因为一切看起来都是正确的

我最终在这里和其他地方偶然发现了一些线程,它们讨论了使用NSS进行加密的较旧版本的Curl的一个问题。我检查了一下,我使用的是libcurl版本7.19.7(大约有8年的历史了),它确实使用了NSS

我使用以下指南更新了我的卷发:。 这将我更新到了libcurl 7.52.1,它使用OpenSSL和lo,瞧,我的应用程序开始工作了

因此,如果您在将curl ftp连接到FTPS服务器时遇到问题,请检查FTPPORT(被动IP)。如果您被拒绝,请检查防火墙,但最重要的是,请检查您的curl:

<?php
print print_r(curl_version());
?>


我希望这对某人有所帮助。

经过数小时的努力,我终于找到了答案

部分原因是客户端服务器和FTP服务器具有“过于”严格的防火墙规则,阻止被动端口

我遇到了以下错误:

错误编号:35;错误:SSL连接错误

错误35是因为防火墙规则。一旦这些被放松,错误就消失了,但是作为一个注意事项,如果客户端机器被NAT'ed,您也会看到这个错误。如果是,您需要设置curl选项:

curl_setopt($c,CURLOPT_ftupport,'1.2.4.5');//更改为您的实际IP

这将告诉FTP服务器在何处打开其数据通道(而不是尝试将其打开到客户端服务器的内部地址)

无论如何,一旦设置了防火墙和FTPPORT选项,我就得到了:

错误号:30;错误:绑定(端口=0)失败:无法分配请求的地址

这件事让我困惑了好一阵子,因为一切看起来都是正确的

我最终在这里和其他地方偶然发现了一些线程,它们讨论了使用NSS进行加密的较旧版本的Curl的一个问题。我检查了一下,我使用的是libcurl版本7.19.7(大约有8年的历史了),它确实使用了NSS

我使用以下指南更新了我的卷发:。 这将我更新到了libcurl 7.52.1,它使用OpenSSL和lo,瞧,我的应用程序开始工作了

因此,如果您在将curl ftp连接到FTPS服务器时遇到问题,请检查FTPPORT(被动IP)。如果您被拒绝,请检查防火墙,但最重要的是,请检查您的curl:

<?php
print print_r(curl_version());
?>

我希望这对某人有帮助