配置 vsftpd 使用 SSL 证书加密数据传输

Posted 笨小孩@GF 知行合一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置 vsftpd 使用 SSL 证书加密数据传输相关的知识,希望对你有一定的参考价值。

FTP 与 HTTP 一样缺省状态都是基于明文传输,希望 FTP 服务器端与客户端传输保证安全,可以为 FTP 配置 SSL

TLS

安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性

该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

传输层安全性协议(英语:Transport Layer Security,缩写TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在浏览器邮箱即时通信VoIP网络传真等应用程序中,广泛支持这个协议。主要的网站,如GoogleFacebook等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

TLS协议采用主从式架构模型,用于在两个应用程序间透过网络创建起安全的连线,防止在交换数据时受到窃听及篡改。

TLS协议的优势是与高层的应用层协议(如HTTPFTPTelnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。

TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议通信端口(例如:用于HTTPS的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:邮件、新闻协议和STARTTLS)。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据。通过握手,客户端和服务器协商各种参数用于创建安全连接:

  • 当客户端连接到支持TLS协议的服务器要求创建安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。

  • 服务器从该列表中决定加密和散列函数,并通知客户端。

  • 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。

  • 客户端确认其颁发的证书的有效性。

  • 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。

  • 利用随机数,双方生成用于加密和解密的对称密钥。这就是TLS协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS握手过程就会失败,并且断开所有的连接。

SSL 1.0、2.0和3.0

SSL(Secure Sockets Layer)是网景公司(Netscape)设计的主要用于Web的安全传输协议,这种协议在Web上获得了广泛的应用。

基础算法由作为网景公司的首席科学家塔希尔·盖莫尔(Taher Elgamal)编写,所以他被人称为“SSL之父”。

2014年10月,Google发布在SSL 3.0中发现设计缺陷,建议禁用此一协议。攻击者可以向TLS发送虚假错误提示,然后将安全连接强行降级到过时且不安全的SSL 3.0,然后就可以利用其中的设计漏洞窃取敏感信息。Google在自己公司相关产品中陆续禁止回溯兼容,强制使用TLS协议。Mozilla也在11月25日发布的Firefox34中彻底禁用了SSL 3.0。微软同样发出了安全通告。

  • 1.0版本从未公开过,因为存在严重的安全漏洞。

  • 2.0版本在1995年2月发布,但因为存在数个严重的安全漏洞而被3.0版本替代。

  • 3.0版本在1996年发布,是由网景工程师Paul Kocher、Phil Karlton和Alan Freier完全重新设计的。较新版本的SSL/TLS基于SSL 3.0。SSL 3.0作为历史文献IETF通过RFC 6101发表。


  • cd /etc/vsftpd
  • 使用 OpenSSL 生成自签证书
    openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650
  • OpenSSL 简单参数解释:
    req #是 X.509 Certificate Signing Request (CSR,证书签名请求)管理的一个命令。
    x509 #X.509 证书数据管理。
    days #定义证书的有效日期。
    newkey #指定证书密钥处理器。
    keyout #设置密钥存储文件。
    out #设置证书存储文件,注意证书和密钥都保存在一个相同的文件
  • mkdir .sslkey
    mv vsftpd.pem .sslkey/

  • 修改配置文件,支持 SSL
  • vim vsftpd.conf
  • ssl_enable=YES        #启用 SSL 支持。
    allow_anon_ssl=NO
    force_local_data_ssl=YES 
    force_local_logins_ssl=YES
    force_anon_logins_ssl=YES
    force_anon_data_ssl=YES
    #上面四行 force 表示强制匿名用户使用加密登陆和数据传输。
    ssl_tlsv1=YES       #指定 vsftpd 支持 TLS v1。
    ssl_sslv2=YES      #指定 vsftpd 支持 SSL v2。
    ssl_sslv3=YES      #指定 vsftpd 支持 SSL v3。
    require_ssl_reuse=NO    #不重用 SSL 会话,安全配置项 。
    ssl_ciphers=HIGH           #允许用于加密 SSL 连接的 SSL 算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者。
  • rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
    rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem     #定义 SSL 证书和密钥文件的位置。

  • 注意:上面的配置项不要添加到 vsftpd.conf 文件最后也不要加注释,否则启动报错。而且配置后不能有多余的空格。
    修改完配置文件后,重启服务:
    systemctl restart vsftpd

  • 配置 FileZilla 客户端验证

 

以上是关于配置 vsftpd 使用 SSL 证书加密数据传输的主要内容,如果未能解决你的问题,请参考以下文章

你也是这样认为SSL证书?

Centos6.5基于SSL加密的VSFTPD 服务器搭建和配置

ssl证书加密的好处,使用ssl证书的注意事项

Tomcat服务器配置和使用

ini 使用Let的加密证书为NGINX配置SSL

ini 使用Let的加密证书为NGINX配置SSL