设为首页 收藏本站
查看: 1147|回复: 0

[经验分享] FTP集成开发总结-之SSL

[复制链接]

尚未签到

发表于 2016-6-9 09:30:09 | 显示全部楼层 |阅读模式
  基于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内的地址

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228086-1-1.html 上篇帖子: Apache Ftp Server与spring框架融合 下篇帖子: FTP协议的命令的使用(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表