`
explorer
  • 浏览: 95736 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

FTP集成开发总结-之SSL

阅读更多

    基于FTP/SSL的开发,推荐使用Indy组件。ICS 也开始全面支持SSL(v5 v6 v7),也免费开源, 也是候选方案,以前我用ics v5的ssl的相关支持还要收费呢。 Indy的优势在于开发组人马众多、版本更新快,对于不同FTP server 返回的LIST格式的支持比较全面。 

    Indy10开始全面支持SSL,对于FTP/SSL的应用,以客户端为例:只需要新加一个 TIdSSLIOHandlerSocketBase 组件,再将TIdFTP组件的 IOHandler指向它,设置IdFTP组件的 UseTLS、 DataPortProtection 即可。

UseTLS 属性决定了客户端连接服务器的模式:

  • utNoTLSSupport- 根本不使用TLS
  • utUseImplicitTLS- 隐式TLS(implicitTLS) 。通常这种模式下,客户端连接到990端口,建立TLS会话,整个会话都是加密的。但是IETF 已经废弃了对ImplicitTLS的支持,所以一般情况下这种设置只是用来连接那些还不支持explicitTLS的ftp服务器。
  • utUseRequireTLS- 强制显式TLS。这种模式下,客户端像普通ftp会话一样,以非加密方式连接到21端口,ftp服务器给你一个hello信息,然后你发出一个特殊TLS命令(AUTH TLS, AUTH SSL, AUTH TLS-P 或 AUTH TLS-C)开始建立TLS会话,其后再进行ftp USER PASS 认证过程,整个会话保持加密状态持续到结束或你发出一个重初始化命令(REIN)。 如果TLS会话建立不成功,后面的ftp会话就自动断开了,无法继续。
  • utUseExplicitTLS-显式TLS(explicitTLS)。这种模式类似上面的 utUseRequireTLS,只是如果TLS会话建立不成功,仍然可以继续传统的非加密FTP会话。 这种模式可以保证最大的兼容性。

所谓隐式TLS/显式TLS,区别主要在是否独立开监听端口上。

隐式TLS的实现,都是要求服务器单独listen一个特殊端口,客户端连接后直接建立SSL会话,然后再进行应用协议的command,整个过程都是加密的;而显式TLS的实现,是在原应用协议的基础上改进,增加了TLS认证的command,并且server不占用单独的端口。
以FTP/SSL为例:
隐式TLS-服务器在990端口监听,客户端建立TCP连接,然后建立SSL连接,然后进行USER PASS的ftp 认证。 其间是没有 AUTH TLS这种特殊command的。
显式TLS-服务器仍然在21端口监听,客户端正常发起tcp连接、服务器返回hello、客户端发起AUTH TLS-至此建立了TLS认证,以后才是加密状态。如果服务器设置了必须使用TLS,则当server hello后,客户端试图不建立SSL连接而直接进行USER PASS的ftp认证,服务器会踢掉客户端。

 


简而言之:
隐式TLS-干脆利落,服务器listen一个单独端口,上来就直接SSL加密,然后才建立应用层会话。
显式TLS-保持最大的兼容性,还是混在原来的端口,只是应用层会话一旦建立,就用特殊的命令来建立SSL会话。


另:
1.  按Indy的官方说法, Indy8、9 无法支持ftp on SSL的应用,因为老版本缺乏支持ftp on ssl 某些关键特性:比如提供了PORT PASV的加密&不加密数据传输通道及开始explicit TLS会话的命令。 (原话是这样的:In Indy 8.0 and Indy 9.0, you can not do this.  The File Transfer Protocol requires some extensions that those Indy versions do not support them.  The extensions provide encrypted or clear PORT and PASV data channels plus provide a command for starting negotiation with explicit TLS.  )

2.  SSL加密的ftp连接,最好只使用 PASV模式。 因为客户端的NAT无法识别加密后的客户端发出的PORT 命令中的ip地址,它就无法翻译成NAT内的地址

0
0
分享到:
评论

相关推荐

    SU-FTP-Server-Windows-v15.1.1

    SU-FTP服务器是一款强大的FTP解决方案,由SolarWinds公司开发。它支持多种身份验证方式,包括Windows NT/AD集成、FTP用户账户和匿名访问,确保了灵活的权限管理和安全的文件交换。 3. **主要特性**: - **多域...

    libcurl-vc15-x86-release-dll-ssl-static.zip

    《libcurl-vc15-x86-release-dll-ssl-static.zip:构建C++应用中的HTTPS支持》 libcurl是一个著名的开源库,用于在各种编程语言中处理网络协议,包括HTTP、HTTPS、FTP等。在给定的压缩包“libcurl-vc15-x86-release...

    libcurl库 libcurl-7.19.3-win32-ssl-msvc

    这个名为"libcurl-7.19.3-win32-ssl-msvc"的版本是针对Windows平台的,特别适用于32位系统,并且集成了SSL(Secure Sockets Layer)支持,意味着它能够处理加密的HTTPS连接。此外,它还与Microsoft Visual C++(MSVC...

    C# FTP服务器 客户端 开发

    - SSL/TLS加密:为了保证文件传输的安全,FTP可以使用FTPS(FTP over TLS/SSL)协议,C#中的FTPClient支持FTP Secure(FTPS)和SFTP(SSH文件传输协议)。 - 数据保护:确保用户密码安全存储,避免明文传输,可以...

    ftp ssl 上传组件 for Powerbuilder

    FTP SSL(Secure Socket Layer)上传组件是为PowerBuilder开发的一款工具,它允许用户在PowerBuilder应用程序中实现安全的文件传输。FTP SSL是在FTP协议基础上添加了SSL/TLS(Transport Layer Security/Transport ...

    Laravel开发-ftp

    在这个“Laravel开发-ftp”项目中,我们可能看到的是如何在Laravel应用中集成FTP驱动来处理远程文件操作。 首先,我们需要安装Laravel的FTP扩展。Laravel 5.3及以上版本不再内置FTP驱动,所以需要通过Composer添加...

    ftp 各种客户端 ftp4j-1.5.1.zip j-ftp-1.52.tar.gz jsch-0.1.43.zip

    FTP4J是由Marco Tuzzo开发的开源库,它提供了完整的FTP协议支持,包括ASCII和二进制模式的数据传输、被动和主动模式、TLS/SSL安全连接以及断点续传等功能。开发者可以使用FTP4J轻松地在Java应用中集成FTP服务,进行...

    curl-7.32.0-rtmp-ssh2-ssl-sspi-zlib

    在"curl-7.32.0-rtmp-ssh2-ssl-sspi-zlib"这个版本中,我们看到它集成了RTMP、SSH2、SSL、SSPI和Zlib等多种功能,这使得curl成为一个极其多功能的网络传输解决方案。 首先,RTMP(Real Time Messaging Protocol)是...

    curl-7.17.1-win32-ssl

    "win32-ssl"这部分表明这个版本是为32位Windows系统设计的,并且集成了SSL(Secure Sockets Layer)支持。SSL是网络安全传输的基础,用于加密数据,确保在互联网上传输的信息不被窃取,对于处理敏感信息如登录凭据、...

    curl-ssl-ssh curl7.43.0编译完成文件

    在curl-ssl-ssh这个特定的版本中,它集成了SSL(Secure Sockets Layer)和SSH(Secure Shell)两大安全通信协议,极大地增强了数据传输的安全性。 SSL是互联网上广泛采用的一种加密传输协议,它的主要功能是为网络...

    apache_ftp 开发包

    总结来说,Apache FTP开发包是构建FTP应用的理想选择,它集成了Apache Commons Net、MINA、FTPServer等组件,提供了完整的FTP客户端和服务器端实现,同时具备强大的日志记录能力,方便开发者进行调试和监控。...

    libcurl-vc15-x86-release-static-ssl-static-zlib-static-ipv6-sspi.zip

    这个压缩包"libcurl-vc15-x86-release-static-ssl-static-zlib-static-ipv6-sspi.zip"是为Windows平台编译的一个特定版本,针对Visual C++ 15(即VS2017)的x86架构。以下是关于这个压缩包内含的组件和功能的详细...

    curl-7.40.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz

    总的来说,"curl-7.40.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz"是一个集成了多种功能的Android版curl工具,包括RTMP、SSH2、SSL和zlib支持,旨在提供安全、高效的网络数据传输能力。开发者可以在没有额外...

    appache ftp 资源下载

    Apache FTP资源下载主要涉及到的是Apache组织提供的用于处理FTP(File Transfer Protocol)协议的软件库,这个资源是一个.jar文件,通常在Java开发环境中使用。FTP是一种网络协议,用于在客户端和服务器之间进行文件...

    ftp-server-free

    5. **安全性**:现代FTP服务器通常会集成SSL/TLS或者FTPS(FTP over TLS/SSL)或SFTP(SSH文件传输协议)来加密传输,保护数据不被窃取。 描述中的"简单好用"提示了这款FTP服务器可能具有易用的界面和直观的操作...

    libcurl-7.19.3-win32-ssl-msvc.zip

    压缩包内的文件kupig-9060961-libcurl-7.19.3-win32-ssl-msvc_1611790220可能是libcurl库的打包文件,包含了库文件、头文件、示例代码、配置脚本等资源。具体文件结构和内容需要解压后查看,以了解其详细配置和使用...

    Laravel开发-ftp 让 Laravel 支持 FTP 操作

    本教程将详细介绍如何在Laravel项目中集成FTP功能,以便进行更高效的文件操作。 首先,为了实现FTP操作,我们需要在Laravel中安装一个FTP客户端库。Composer是PHP的依赖管理工具,我们可以通过它来安装`league/...

    ftp4j-1.7.2.jar

    2. **IDE集成**: 如果你在使用如Eclipse、IntelliJ IDEA这样的集成开发环境,可以在项目设置中添加库依赖,将jar文件添加到项目的类路径。 3. **构建工具**: 如果你的项目使用Maven或Gradle等构建工具,可以在相应的...

    pycurl-ssl-7.19.0.win32-py2.7

    总结起来,"pycurl-ssl-7.19.0.win32-py2.7.zip"是一个针对Python 2.7和32位Windows环境的pycurl库的SSL版本,它提供了全面的网络通信功能和强大的性能,是开发网络应用不可或缺的工具。尽管Python 2.7已经不再维护...

    FTP - RFC959 中文版

    例如,FTP客户端库可以让开发者在应用程序中集成FTP功能,而FTP服务器软件则提供服务端的实现。 在阅读《FTP - RFC959 中文版》时,我们可以深入了解FTP的每个命令和响应的含义,以及它们如何通过控制连接协调。这...

Global site tag (gtag.js) - Google Analytics