文档库 最新最全的文档下载
当前位置:文档库 › FTPS和SFTP

FTPS和SFTP

FTPS和SFTP
FTPS和SFTP

一、FTPS和SFTP

FTPS和SFTP都是为ftp连接加密,协议非常相似。

FTPS是借助ssl协议加密,ssl是为http/smtp等加密设计的;SFTP是借助ssh加密,ssh是为telnet/ftp等加密、建立传输通道而设计的。ssh建立传输通道就是为了加密和传输,而且这个通道是可以用来远程登录。创建加密通道对文件进行加密。

如果只说它们的功能,通俗的讲,ssl就像打包裹,ssh就像铺管子,铺管子和打包裹都会使数据安全,都是一个制作密钥的过程,而因为ssh是一个管子所以它很适合ftp的安全传输。

从原理上简单的讲:FTPS是ftp-over-ssl的意思,即ftp借助ssl协议加密传输,不但要用ftp服务器还要用ssl协议加密。sftp协议是ssh中的一条独立的协议,利用sftp服务器就可以传输数据。

由ssh封装的是sftp (应用层的加密)

SFTP验证:

1、只密码验证

2、只公钥验证

3、密码加公钥验证

用ssl的是ftps.(传输层的加密)

SSL验证:

1、只密码验证

2、SSL证书验证

-sftp

-ftp over SSH2

这两种协议是不同的。sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动。ftp over SSH2则象一个二传手。

1、SFTP的工作模式:

图1显示了SFTP的工作模式,它是作为SSH2的一个子服务工作的。

图 1 SFTP工作模式

2、FTP over SSH2

此协议还是基于ftp协议的。在此协议中SSH2服务器起了一个桥梁作用,把数据在客户端和ftp之间转发。ftp协议本身包括两个通道,一个是控制通道,另一个是数据通道。

FTP over SSH2有两种情况,半安全连接(Less Secure Connection)和安全连接(Full Secure Connection)。在半安全连接时,ftp客户端先和SSH2服务器连接,在这个连接中无论控制通道和数据通道都是加密的。但是SSH2服务器和 ftp服务器之间就不是加密的了,如果ftp服务器运行在另外一台机器上,SSH2服务器和ftp 直接就是明文传输。见图2。

图 2半安全连接

图3是安全连接模式的情形,SSH2服务器和FTP服务器在同一台服务器上。

图 3 安全连接

二、SSH和SFTP简介

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的

服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

SSH的英文全称是SecureShell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH 有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。

最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH2.x的客户程序是不能连接到SSH1.x的服务程序上去的。OpenSSH2.x同时支持SSH1.x和2.x。

SSH的安全验证是如何工作的

从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

(SSH:SecureShellProtocol)

安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。SecureShell,又可记为SSH,最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH是一个好的应用程序,在正确使用时,它可以弥补网络中的漏洞。除此以外,SSH之所以酷,还有以下原因:SSH客户端适用于多种平台。几乎所有的UNIX平台—包括HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix、SCO,以及其他平台—都可以运行SSH。而且,已经有一些客户端(其中有些为测试版)可以运行于UNIX操作平台以外,包括OS/2、VMS、BeOS、Java、Windows95/98和WindowsNT。这样,你就可以在几乎所有的平台上运行SSH客户端程序了。对非商业用途它是免费的。许多SSH版本可以获得源代码,并且只要不用于商业目的,都可以免费得到。而且,UNIX版本也提供了源代码,这就意味着任何人都可以对它进行修改。但是,如果你选择它用于商业目的,那么无论使用何种版本的SSH,你都得确认已经注册并获得了相应权限。绝大多数SSH的客户端和守护进程都有一些注册限制。惟一的SSH通用公共注册(GeneralPublicLicense,GPL)版本是lsh,它

目前还是测试版。通过Internet传送密码安全可靠。这是SSH被认可的优点之一。如果你考察一下接入ISP(InternetServiceProvider,Internet服务供应商)或大学的方法,一般都是采用Telnet或POP邮件客户进程。因此,每当要进入自己的账号时,你输入的密码将会以明码方式发送(即没有保护,直接可读),这就给攻击者一个盗用你账号的机会—最终你将为他的行为负责。对应用的支持。由于SSH的源代码是公开的,所以在UNIX世界里它获得了广泛的认可。Linux,其源代码也是公开的,大众可以免费获得,并同时获得了类似的认可。这就使得所有开发者(或任何人)都可以通过补丁程序或bug修补来提高其性能,甚至还可以增加功能。这也第一部分获得并安装SSH意味着其性能可以不断得到提高而无须得到来自原始创作者的直接技术支持。SSH替代了不安全的远程应用程序。SSH是设计用来替代伯克利版本的r命令集的;它同时继承了类似的语法。其结果是,使用者注意不到使用SSH和r命令集的区别。利用它,你还可以干一些很酷的事。通过使用SSH,你在不安全的网络中发送信息时不必担心会被监听。你也可以使用POP通道和Telnet方式,通过SSH可以利用PPP 通道创建一个虚拟个人网络(VirtualPrivateNetwork,VPN)。SSH也支持一些其他的身份认证方法,如Kerberos和安全ID卡等。

但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH 是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH2.x的客户程序是不能连接到SSH1.x的服务程序上去的。OpenSSH2.x同时支持SSH1.x和2.x。

SSH主要有三部分组成:

传输层协议[SSH-TRANS]提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。SSH-TRANS通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。SSH-TRANS提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

用户认证协议[SSH-USERAUTH]用于向服务器提供客户端用户鉴别功能。它运行在传输层协议SSH-TRANS上面。当SSH-USERAUTH开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H)。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。SSH-USERAUTH也需要知道低层协议是否提供保密性保护。

连接协议[SSH-CONNECT]将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发TCP/IP连接和转发X11连接。

一旦建立一个安全传输层连接,客户机就发送一个服务请求。当用户认证完成之后,会发送第二个服务请求。这样就允许新定义的协议可以与上述协议共存。连接协议提供了用途广泛的各种通道,有标准的方法用于建立安全交互式会话外壳和转发(“隧道技术”)专有TCP/IP端口和X11连接。

通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。

SSH分为两部分:客户端部分和服务端部分。

服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。

服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务

端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH1.x和SSH2.x在连接协议上还有着一些差异。

SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用#ps-waux|grepsshd来查看sshd 是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

三、SSH1与SSH2的区别

SSH1又分为1.3和1.5两个版本。SSH1采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥是通过非对称加密算法(RSA)

来完成交换的。SSH1使用循环冗余校验码(CRC)来保证数据的完整性,但是后来发现这种方法有缺陷。

SSH2避免了RSA的专利问题,并修补了CRC的缺陷。SSH2用数字签名算法(DSA)和Diffie-Hellman(DH)算法代替RSA来完成对称密钥的交换,用消息证实代码(HMAC)来代替CRC。同时SSH2增加了AES和Twofish等对称加密算法。

四、SSH1缺陷

与SSH有关的最具破坏性的安全漏洞之一是在SSH1 CRC-32软件里负责侦测"补偿攻击"手段的代码里存在一个缺陷。该代码是几年前增加的,目的是解决SSH1协议中

与加密相关的一个严重的弱点。正像校正安全性问题的许多其他补丁一样,该补丁在攻击检测代码中引入了一个新的漏洞,导致在使用了该补丁的SSH服务器和客户

端执行可以任意的代码。在检测过程使用了一个散列表,是根据接收的数据包大小动态分配的。问题起因于检测代码中一个变量的不正确的声明。因而,攻击者可以

制作大的SSH数据包(长度>216),使得缺陷代码用参数0调用xmalloc(),并返回一个指向程序地址空间的指针。如果攻击者能够向程序(SSH服务器或客户端)

地址空间的任意内存位置进行写入操作,那么就可以在被攻击的系统上执行任意代码。

该缺陷不仅影响SSH服务器,也影响SSH客户端。所有支持协议1(1.5)(其中使用了CRC校验进行攻击检测)的SSH都是易受攻击的

结论

使用SFTP的密钥验证安全性最高。测试使用第三方API

A、jsch-0.1.44.jar jzlib-1.0.7.jar

B、jftp.jar

备注

Channel channel = sshSession.openChannel("sftp"); 选项:

1、session

2、shell设置安全交互Shell会话

3、exec

4、x11 X11连接

5、auth-agent@https://www.wendangku.net/doc/e06372470.html,

6、direct-tcpip传输任意的TCP/IP端口

7、forwarded-tcpip传输任意的TCP/IP端口

8、sftp

9、subsystem

相关文档