使用cURL进行ftp上载时出现未知的SSL协议错误

时间:2014-10-29 15:02:33

标签: php ssl curl ftp

我正在尝试使用PHP中的cURL在tls连接上传一个带有显式ftp的文件。使用ftp服务器的身份验证成功,但是当我尝试以被动模式上传文件时,我收到以下错误:“与server.domain.nl:21连接时出现未知的SSL协议错误”。

在这种情况下可能出现什么问题?是不是我的提供商阻止了被动上传的端口?我可以更改文件上传的端口吗?

我的网站提供商不支持ftp_ssl_connect,因此我无法使用该功能。

THX, 千斤顶

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.x)端口50075
  TYPE I   < 200类型设置为I.
  STOR 00191_2773.xml   < 150打开BINARY模式数据连接   *对数据流进行SSL / TLS握手
  *成功设置证书验证位置:
  * CAfile:c:\ vevida \ php54 \ cacert.pem
    CApath:没有   * SSL重新使用会话ID
  *与server.domain.nl:21相关的未知SSL协议错误   *关闭连接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) ;

1 个答案:

答案 0 :(得分:0)

  

我的提供商是否阻止了被动上传的端口?

可能是提供商只允许少量传出端口,但我对此表示怀疑。询问提供者。

  

我可以更改文件上传的端口吗?

不,此端口由FTP服务器确定。

你应该检查一下:

  • 使用普通FTP尝试查看问题是否与FTP over TLS有关。
  • 尝试使用其他FTP服务器。
  • 尝试使用其他程序访问服务器。

除此之外:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) ;
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false) ;

为什么你要使用TLS,因为你无论如何都要禁用对等体的验证?或者这仅用于测试?