使用cURL上传ftp时出现未知SSL协议错误


Unknown SSL protocol error in a ftp upload with cURL

我正在尝试使用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?还是这只是为了测试?