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 客户端验证