4 SSL VPN应用方案与实现
我们设计了基于SSL VPN技术的应用方案,构架了SSL协议的实现体。其实现原理为:在客户端和服务器之间通过协商,采用RSA算法加密,建立起安全通道,在此通道内传输的信息经过RC4加密运算,保证数据的机密性;利用MD5函数对所传输的信息提取消息验证码,确保信息的完整性;利用证书交换技术,实现客户端和服务器的识别和认证,实现身份的可认证性。
该方案可分为客户端和服务器端两个部分实现SSL协议,其程序框架如下:
1.客户端程序的框架为
meth = SSLv23_client_method();
//生成SSL结构
ctx = SSL_CTX_new (meth);
ssl = SSL_new(ctx);
fd = socket(); //socket过程
connect();
/*把建立好的socket和SSL结构联系起来*/
SSL_set_fd(ssl,fd);
SSL_connect(ssl); /*SSL的握手过程*/
SSL_write(ssl,"Hello!,strlen("Hello!")
2.服务端程序的框架为:
meth = SSLv23_server_method();
//生成SSL结构
ctx = SSL_CTX_new (meth);
ssl = SSL_new(ctx);
fd = socket(); //socket过程
bind();
listen();
accept();
/*把建立好的socket和SSL结构联系起来*/
SSL_set_fd(ssl,fd);
SSL_connect(ssl); /*SSL的握手过程*/
SSL_read (ssl, buf, sizeof(buf));
传输过程中需要的证书和密钥文件:
1)生成服务器端的私钥(key文件):openssl genrsa -des3 -out server.key 512;
2)生成证书签署请求CSR:openssl req -new -key server.key -out server.csr;
3) 生成CA的key文件:openssl -des3 -out ca.key 1024;
4) 生成CA自签名证书:openssl req -new -x509 -key ca.key -out ca.crt;
5) 用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:./sigh.sh server.csr。
在程序中我们选用RC4做加密,MD5做消息摘要(先进行MD5运算,后进行RC4加密),由SSL_CTX_set_cipher_list(ctx,"RC4-MD5")实现。
我们在S3C2410硬件平台的嵌入式Linux Web浏览器应用中,实现了上述SSL优化方案。实际应用测试的结果,符合我们的设计目标。在嵌入式产品中使用精简优化后的SSL是切实可行的方案,通过简化握手流程、减少新连接的次数、会话重用、精选加密算法等方法,使之更适合嵌入式系统的实际应用。其不足是SSL VPN 在现阶段只能访问基于Web的应用,远程用户还不能进行基于非Web 界面的应用。此外,由于SSL VPN并不对通信双方的整个通道进行加密,只能为访问资源提供有限的安全保障,在Web页面中呈现的文件,无法保证只出现类似于上传文件和邮件附件等简单的文件,这样就很难保证其它文件不被暴露在外部,存在一定的安全隐患。这是SSL VPN 面临的一个挑战,也是我们今后要重点研究并解决的问题。
5 结束语
嵌入式系统处理器和其它硬件性能的提升,使得基于SSL和TLS的VPN变为可能,SSL采用通信数据加密、身份验证等安全技术,较好地保证了数据传送过程中的保密性、身份鉴别、不可否认和完整性,防止了窃听、欺骗、篡改、会话劫持等多种Web攻击手段。随着嵌入式网络安全的重要性越发突出,相信SSL VPN的应用将更加广泛。
4 SSL VPN应用方案与实现
我们设计了基于SSL VPN技术的应用方案,构架了SSL协议的实现体。其实现原理为:在客户端和服务器之间通过协商,采用RSA算法加密,建立起安全通道,在此通道内传输的信息经过RC4加密运算,保证数据的机密性;利用MD5函数对所传输的信息提取消息验证码,确保信息的完整性;利用证书交换技术,实现客户端和服务器的识别和认证,实现身份的可认证性。
该方案可分为客户端和服务器端两个部分实现SSL协议,其程序框架如下:
1.客户端程序的框架为
meth = SSLv23_client_method();
//生成SSL结构
ctx = SSL_CTX_new (meth);
ssl = SSL_new(ctx);
fd = socket(); //socket过程
connect();
/*把建立好的socket和SSL结构联系起来*/
SSL_set_fd(ssl,fd);
SSL_connect(ssl); /*SSL的握手过程*/
SSL_write(ssl,"Hello!,strlen("Hello!")
2.服务端程序的框架为:
meth = SSLv23_server_method();
//生成SSL结构
ctx = SSL_CTX_new (meth);
ssl = SSL_new(ctx);
fd = socket(); //socket过程
bind();
listen();
accept();
/*把建立好的socket和SSL结构联系起来*/
SSL_set_fd(ssl,fd);
SSL_connect(ssl); /*SSL的握手过程*/
SSL_read (ssl, buf, sizeof(buf));
传输过程中需要的证书和密钥文件:
1)生成服务器端的私钥(key文件):openssl genrsa -des3 -out server.key 512;
2)生成证书签署请求CSR:openssl req -new -key server.key -out server.csr;
3) 生成CA的key文件:openssl -des3 -out ca.key 1024;
4) 生成CA自签名证书:openssl req -new -x509 -key ca.key -out ca.crt;
5) 用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:./sigh.sh server.csr。
在程序中我们选用RC4做加密,MD5做消息摘要(先进行MD5运算,后进行RC4加密),由SSL_CTX_set_cipher_list(ctx,"RC4-MD5")实现。
我们在S3C2410硬件平台的嵌入式Linux Web浏览器应用中,实现了上述SSL优化方案。实际应用测试的结果,符合我们的设计目标。在嵌入式产品中使用精简优化后的SSL是切实可行的方案,通过简化握手流程、减少新连接的次数、会话重用、精选加密算法等方法,使之更适合嵌入式系统的实际应用。其不足是SSL VPN 在现阶段只能访问基于Web的应用,远程用户还不能进行基于非Web 界面的应用。此外,由于SSL VPN并不对通信双方的整个通道进行加密,只能为访问资源提供有限的安全保障,在Web页面中呈现的文件,无法保证只出现类似于上传文件和邮件附件等简单的文件,这样就很难保证其它文件不被暴露在外部,存在一定的安全隐患。这是SSL VPN 面临的一个挑战,也是我们今后要重点研究并解决的问题。
5 结束语
嵌入式系统处理器和其它硬件性能的提升,使得基于SSL和TLS的VPN变为可能,SSL采用通信数据加密、身份验证等安全技术,较好地保证了数据传送过程中的保密性、身份鉴别、不可否认和完整性,防止了窃听、欺骗、篡改、会话劫持等多种Web攻击手段。随着嵌入式网络安全的重要性越发突出,相信SSL VPN的应用将更加广泛。
举报