安全文件传输系统的设计与实现院系:计算机与通信工程学院班级:嵌入式软件10-01姓名:学号:54111指导老师:陈晓雷老师1.安全文件传输系统的软件设计框架安全文件传输系统由硬件和软件两部分组成。硬件部分可以是普通的安装Linux操作系统的PC机,也可以是嵌入式系统。本系统的硬件实现平台是S3C2440嵌入式开发板。现代网络通信中,大部分网络协议的实现都由客户端(Client)和服务器端(Server)来协作完成。这种模型本质上涉及两个不同的程序,通常这两个程序在不同机器上运行,这些机器之间都有网络连接。服务器端程序提供服务并对来自客户程序的请求作成响应。而客户端程序则是在使用者和服务器端程序之间建立某种沟通的渠道,或者是作为使用服务器端提供的某种网络服务的工具。本文传输过程也是通过客户端和服务器端来实现,软件实现的总体框图如图:系统使用C和C++程序编写,支持将每个文件的元数据进行存储;支持从服务器中获取文件的元数据;服务器是多线程的,能够允许多个客户端同时连接;并且记录文件操作事件日志,能够支持用户名和密码的验证;客户端是QT应用程序,具有上传和下载两种能力,并且为了确保上传和下载是否成功,先检查碰盘空间。系统的数据流如图:服务器端是数据流向的交汇点,也是系统数据存储的资源池。各个客户端发起连接请求,服务端利用进程并发技术,相应多个客户端的请求。因此服务端主要完成两个任务,检查客户端是否成功登录,以及判断客户端发来的信号,对该信号进行相应。客户端是每个应用终端的实现方式也是外在表现,它主要包括:登录交互平台、检查信息是否完整喝客户端主窗口的配置。用户根据自己的需要在成功登录系统以后,可以向服务器发出命令。可以发出的命令包括:服务器List显示、服务器端List刷新、上传文件、下载文件、客户端List显示。系统的内部设计是通过socket套接字建立连接,socket在所有的网络操作系统和网络应用程序中都是必不可少的,它是网络通信中应用进程和网络协议之间的接口。在Linux操作系统中,socket属于文件系统中的一部分,网络通信可以被看作是对文件系统的读取。这就使得用户对网络的控制,像对文件的控制一样方便。Socket网络通信同样也分为服务器端和客户端两部分。2.安全文件传输系统的服务器端设计服务器端的作用是响应用户连接请求,验证用户,对取到的命令进行解析,根据命令执行不同的操作。根据输入的文件名打开文件并将文件数据读入缓冲区;将缓冲区内的数据写入文件。并且对接收到的协议包解封,将数据缓冲区中的数据进行封装。服务器端内部设计流程图如图:服务器端内部设计主要用到的连接函数有:(1)intsocket(intfamily,inttype,intprotocol)该函数用于建立一个socket连接,可指定socket类型等信息。在建立了socket连接之后,可对socketadd或sockaddr_in进行初始化,以保存所建立的socket信息。(2)intbind(intsockfd,structsockaddr*my_addr,intaddrlen)该函数是用于将本地IP地址绑定端口号的,若绑定其他地址则不能成功。另外,它主要用于TCP的连接,而在UDP的连接中则无必要。本文基于TCP连接。(3)intlisten(intsockfd,intbacklog)该函数用于通知内核,服务器将在某个套接口上监听并接受连接。(4)intaccept(intsockfd,void*addr,int*addrlen)该函数的作用是,当其被调用时,服务器端的程序会一直拥塞直到有一个客户程序发出了连接。accept()调用成功时,返回连接进来的客户机的文件描述符,之后服务器端就可以利用该描述符向客户机读写信息了,失败时返回-1.(5)intsend(intsockfd,constvoid*msg,intlen,unsignedintflags)和intrecv(intsockfd,void*buf,intlen,unsignedintflags)这两个函数是在建立连接后用于完成发送与接收数据的系统调用。3.安全文件传输系统的客户端设计客户端的作用是通过输入IP,port向服务器发起请求连接,然后将用户名和密码发给服务器进行验证,验证通过后通过选中客户端本地的目录来查看该目录下的文件列表,上传的时候根据输入的文件名找到文件并将文件数据读入缓冲区,下载的时候从保存有文件数据的缓冲区取出数据写入本地磁盘。客户端在上传文件的时候将得到的文件数据缓冲区中的数据封装到协议包,下载文件的时侯根据得到的协议包解析出其中包含的文件有效数据。客户端内部设计流程图:客户端内部设计主要用到的连接函数有:(1)intsocket(intfamily,inttype,intprotocol)该函数的作用同服务器端socket()函数,用于建立socket连接。(2)intbind(intsockfd,structsockaddr*my_addr,intaddrlen)该函数的作用同服务器端bind()函数,用于将本地IP地址绑定端口号。(3)intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen)该函数用于与服务器端建立连接。(4)intsend(intsockfd,constvoid*msg,intlen,unsignedintflags)和intrecv(intsockfd,void*buf,intlen,unsignedintflags)这两个函数是在建立连接后用于完成发送与接收数据的系统调用。系统的通信流程是:首先在服务器端使用socket()建立一个通信的断点,再用bind()命令把一个地址绑定到这个端点,然后,服务器端使用listen()侦听连接请求。当远程的客户机试图使用connect()连接listen()正在监听的端口时,连接将会在请求队列中等待,直到服务器使用accept()处理了连接请求后,将会产生一个新的描述这个连接端口的套接字,利用这个套接字旧可以发送或接收数据了。如果listen()一直没有侦听到连接请求,那么服务器任务就会在accept()处阻塞,直到有连接请求到来。对于客户任务来说,它也需要先用socket()建立一个通信端口,但是它不必用bind()把一个本地地址绑定到这个端口,而是直接使用connect()向指定的服务器发出连接请求,如果请求被接受,下一步就可以进行数据流通信了。4.安全文件传输系统的安全策略设计目前常见的加密协议有以下几种:IPSec协议,SET协议,SSL协议。其中IPSec协议可以提供很高的安全性,但是实现它却不是一件很容易的事,它需要对网络层的IP数据包进行重新封装,无论对服务器还是客户端都要做很大的改动,对于安全文件传输系统而言,代价很大且增加了通信两端的复杂度。SET协议是应用层的安全协议,它是专门针对网上信用卡支付提出的一个标准,主要是保证通信信息的加密与安全,很有针对性。本系统并未涉及电子交易方面的东西,因此不是网络通信系统安全协议的最佳选择。SSL协议是一种在两台机器之间提供安全通道的协议,它具有保护传输数据喝识别通信机器的功能。应用SSL协议所建立的通道是透明的,它对传输的数据不加更改,客户端和服务器之间的数据是经过加密的,这种透明性使得几乎所有基于TCP的协议稍加修改就可以运行于SSL之上,非常方便。本系统就是利用SSL协议为Linux系统之间的文件传输打造一个安全的通道。SSL可以看成是在应用层和传输层之间的一个层,SSL协议在应用层协议通信之前完成加密算法、通信密钥的协商以及服务器认证工作.应用层协议传送加密数据。从而保证通信的私密性。SSL协议堆栈图如图:SSL协议主要功能是在客户与服务器间提供了一条的安全通信连接,主要由握手协议和记录协议实现。其中SSL握手协议负责客户与服务器间会话的加密。当SSL客户端与服务器第一次通信时。他们需要交换版本号、加密算法、身份认证并使用公钥技术来生成共享密钥:SSL记录协议用于交换应用数据。发送方SSL接收应用层数据。对数据加密。而后将加密数据送往TCP插口,接收方从TCP插口读取数据后。解密交给应用层。SSL协议提供一种加密的握手会话.使客户端和服务器端实现身份验证、协商加密算法和压缩算法、交换密钥信息。如果两台计算机协商建立新的SSL会话.它们会使用数字证书来确认对方的身份、交换密钥材料。密钥材料的交换利用网络服务器的公钥对材料进行加密。一旦收到加密后的材料.网络服务器就用相应的私钥进行解密。这种握手会话通过数字签名和数字证书来实现客户机和服务器双方的身份验证。在用数字证书对双方的身份验证后。双方就可以用密钥进行安全会话。本系统的服务器端SSL协议实现过程如图:所示为服务器端SSL流程,客户端的SSL实现是服务器端实现的逆过程。整体流程为:SSL客户端向SSL服务器发送连接请求.并要求验证服务器的身份;服务器发送数字证书响应以证明其身份;客户端验证证书的有效性;服务器发出客户端的证书验证请求;完成对客户端的证书的验证;协商用于加密的加密算法和用于完整性检查的哈希函数;客户端和服务器互发随机数并通过使用哈希函数从随机数中生成会话密钥。SSL握手协议描述建立安全连接的过程。而SSL记录协议则定义了数据传送的格式.上层数据包括SSL握手协议建立安全连接时所需传送的数据都通过SSL记录协议再往下层传送。这样,应用层通SSL协议把数据传给传输层时,已是被加密后的数据。5.结论安全文件传输系统是手持式PDA的一个重要功能软件,它的成功实现为用户安全保密工作提供了一种可行的方法。本文从软件的整体设计方法上依次介绍了系统服务端、客户端设计,并对系统安全策略进行了分析,介绍了本系统所使用的SSL协议的加密方法。系统整体运行稳定,传输效率高。6.参考文献[1]卢开澄.计算机网络中的数据保密与安全[M].北京:清华大学出版社,1998.[3]王渊.赵宇.嵌入式Linux网络通信的实现[J].电子测量技术.3.实训总结:通过这半年的大实训,让我对本专业的知识运用有了进一步提高,在自学能力方面也有了不小的进步,对于项目的开发流程和相关知识的如何查找,如何运用也有了新的体会。我觉得最重要的是,如何掌握做项目的方法,如何掌握解决问题的方法,这个过程才是我们大实训的最大意义所在,在老师的指导下,这也是我体会最深刻的地方。