我正在尝试使用PHP中的cURL,通过tls连接上传一个带有显式ftp的文件。ftp服务器的身份验证成功,但当我尝试以被动模式上传文件时,我收到以下错误:"连接到server.domain.nl:21时出现未知SSL协议错误"。
在这种情况下会出现什么问题?可能是我的提供商阻止了被动上传的端口吗?我可以更改文件上传的端口吗?
我的网站提供商不支持ftp_ssl_connect,所以我无法使用该功能。
Thx,Jack
FTP日志:
230用户已登录。
PBSZ 0
<200 PBSZ命令成功
PROT P
<200 PROT命令成功
PWD
<257"/"是当前目录
*入口路径为"/"
CWD avs
<250 CWD命令成功
EPSV
*被动连接数据流
<229进入扩展被动模式(|||50075|)
*正在尝试x.x.x.x…
*正在连接到x.x.x(x.x.x.x)端口50075
类型I
<200类型设置为I。
STOR 00191_2773.xml<150打开二进制模式数据连接
*对数据流执行SSL/TLS握手
*成功设置证书验证位置:
*CA文件:c:''vevida''php54''cachert.pem
CApath:无
*SSL重新使用会话ID
*连接到服务器时出现未知SSL协议错误。domain.nl:21
*关闭连接19
我的代码是:
$ch = curl_init() ;
$stderr = fopen("d:''www''domein.nl''www''pdf''temp''curl.txt", "w");
$fp = fopen($fileLocation191, 'r') ;
//logging:
curl_setopt($ch, CURLOPT_VERBOSE, TRUE) ;
curl_setopt($ch, CURLOPT_STDERR, $stderr) ;
curl_setopt($ch, CURLOPT_URL, 'ftp://user:pw@server.domein.nl/avs/'.$remote_file191) ;
curl_setopt($ch, CURLOPT_UPLOAD, TRUE) ;
curl_setopt($ch, CURLOPT_INFILE, $fp) ;
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($fileLocation191)) ;
curl_setopt($ch, CURLOPT_PORT, 21) ;
curl_setopt($ch, CURLOPT_USERPWD, 'user:pw');
// SSL STUFF
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) ;
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false) ;
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1) ;
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1') ;
curl_setopt($ch, CURLOPT_FTP_SSL, CURLOPT_FTPSSLAUTH) ;
curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS) ;
// EINDE SSL
//curl_setopt($ch, CURLOPT_FTPPORT, '-') ;
curl_setopt($ch, CURLOPT_TIMEOUT, 30) ;
curl_setopt($ch, CURLOPT_FTP_USE_EPSV, TRUE) ;
curl_setopt($ch, CURLOPT_FTP_USE_PASV, TRUE) ;
curl_setopt($ch, CURLOPT_FTP_USE_EPRT, FALSE) ;
curl_exec ($ch) ;
可能是我的提供商阻止了被动上传的端口吗?
可能是提供程序只允许几个传出端口,但我对此表示怀疑。请询问提供程序。
我可以更改文件上传的端口吗?
否,此端口由FTP服务器决定。
你应该检查一下:
- 尝试使用普通FTP来查明问题是否与TLS上的FTP有关
- 请使用其他FTP服务器进行尝试
- 尝试使用其他程序访问服务器
除此之外:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) ;
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false) ;
既然禁用了对等端的验证,为什么还要使用TLS?还是这只是为了测试?