【发布时间】:2017-01-22 22:24:27
【问题描述】:
我正忙于需要连接到 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:// 时观看通讯时,我看不到客户端发出 AUTH TLS 命令,因为它使用普通 ftp://
我遇到的问题是,我们最终必须连接到的客户端的 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 地址来连接.. 可以在 ftps 中使用 IP 地址吗?我还以为证书主要是在证明一个域名?
tl;博士
1) 我可以使用 ftps://domain.com 来使用 CURL PHP 进行连接吗? 2)如果我可以在 curl 中使用 ftps://,那么如何让 curl 登录(发出 auth tls 命令)? 3) FTP 服务器是否可以仅使用 IP 地址使用 SSL/TLS?
谢谢...
约翰
【问题讨论】: