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

  • Post author:
  • Post category:其他


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



网络传真

等应用程序中,广泛支持这个协议。主要的网站,如

Google



Facebook

等也以这个协议来创建安全连线,发送数据。目前已成为

互联网

上保密通信的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用

X.509

认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(

Session key

)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

TLS协议采用

主从式架构

模型,用于在两个应用程序间透过网络创建起安全的连线,防止在交换数据时受到

窃听

及篡改。


TLS协议

的优势是与高层的

应用层

协议(如

HTTP



FTP



Telnet

等)无耦合。

应用层协议

能透明地运行在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日发布的

Firefox

34中彻底禁用了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 客户端验证



版权声明:本文为gaofei0428原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。