我忙于使用curl库,它需要连接到FTPS服务器。
我有个半工作的..。如果我连接到ftp://domain.com,那么它就能工作。如果我用tcpflow查看服务器上的通信,我会看到它使用AUTH登录,并且所有的通信都是加密的。文件被上传了所以一切都很好。
我不确定的是,尝试连接ftps://domain.com是否有效?
我之所以问这个问题,是因为如果我将协议从ftp改为ftp,则登录失败,服务器(查看tcpflow通信)表示登录失败:
191.101.002.204.00021-088.099.012.154.51630: 530 Please login with USER and PASS.另外,当我试图连接到ftps://时,我没有看到客户端发出AUTH命令,就像普通ftp://一样。
我遇到的问题是,我们最终必须连接到的客户端FTP服务器似乎不允许没有ftps://协议的连接。
如果我使用lftp连接,我可以使用ftps://来连接,但是我必须禁用ssl:设置ftp://ssl-allow no
如果我使用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地址可以用于ftps吗?我会认为证书主要是证明一个域名?
tl;dr
1)是否可以使用ftps://domain.com来使用curl PHP进行连接? 2)如果我可以使用ftps:// curl,那么如何使CURL登录(发出auth tls命令)?3) FTP服务器是否可以使用只有IP地址的SSL / TLS?
谢谢..。
约翰
发布于 2017-01-27 16:48:21
许多小时的挣扎使我找到了最终的答案。
部分答案是客户端服务器和FTP服务器有“过度”严格的防火墙规则阻塞被动端口。
我得到了以下错误:
错误编号: 35;错误: SSL连接错误。
错误35是因为防火墙规则。一旦放松了,错误就消失了,但是注意,如果客户端机器是NAT‘’ed的话,您也会看到这个错误。如果是,则需要设置curl选项:
curl_setopt($c,CURLOPT_FTPPORT,'1.2.4.5‘);//更改为实际IP。
这将告诉FTP服务器在哪里打开其数据通道(而不是尝试将其打开到客户端服务器的内部地址)。
无论如何,一旦设置了防火墙和FTPPORT选项,我就得到:
错误编号: 30;错误:绑定(port=0)失败:无法分配请求的地址
这件事使我困惑了一段时间,因为一切看起来都是正确的。
最后,我在这里和其他地方偶然发现了一些线程,它们讨论了使用NSS加密的旧版本Curl的问题。我检查了一下,我使用的是libcurl版本7.19.7 (大约8岁),并且确定它使用的是NSS。
我使用以下指南更新了我的Curl:https://www.digitalocean.com/community/questions/how-to-upgrade-curl-in-centos6。这更新了我的libcurl 7.52.1,它使用OpenSSL和lo,然后,我的应用程序开始工作.
因此,如果您在将curl连接到FTPS服务器时遇到问题,请检查FTPPORT (被动IP) (如果是NAT‘’ed),检查防火墙,但最重要的是检查您的curl:
<?php
print print_r(curl_version());
?>我希望这能帮到某人..。
https://stackoverflow.com/questions/41796808
复制相似问题