在互联网通信过程中,如何保证数据的安全性?
在通信过程中,数据安全主要从三个方面考虑:机密性(数据的内容不能被窃取)
完整性(数据的内容不能被修改)
身份验证(确定通信双方的身份)
加密类型:1.对称加密,加密和解密使用同一个密钥,但是密钥如何安全传输比较重要,对称加密数度较快,适于加密数据
2.单向加密,提取数据指纹,主要用于保证数据的完整性
单向加密的特点:输入相同则输出一定相同
雪崩效应:输入的微小改变会引起结果的巨大反差
定长输出
3.非对称加密,使用一对密钥(public-key和private-key),加密数据的速度很慢,一般不用于加密数据,主要用于身份验证
对称加密特点:公钥加密,只有私钥可以解密
私钥加密,只有公钥可以解密
在使用对称加密的时候,需要双方确定密钥,一般可以使用密钥交换协议,比如Diffie-Hellman算法。 相关算法:
对称加密相关算法:DES
3DES
AES
单向加密算法:(发送方使用某算法提取数据指纹之后附着在数据后面发送,接收方通过相同算法提取其接受到的数据的指纹,然后和收到的数据指纹比较,如果相同,就证明了数据没有被篡改)
MD5,MD4,SHA1,SHA384,SHA512等
非对称加密算法:rsa,dea等
因为非对称加密在加密数据的时候速度比较慢,所以不用其加密数据,但是可以用其加密数据指纹,发送方使用自己的私钥加密数据指纹,那么如果接收方可以使用对方传递过来的公钥解密,则证明了发送方的身份,同时也收到了数据指纹,保证了数据的完整性。那么着眼点就落在了公钥传递上,如何信任发送方传递过来的公钥就要借助于第三方机构CA(certificate authority)
pki(public key infrastructure):公钥基础设施,就是以CA为核心,是提供公钥加密和数字签名服务的系统或平台,目的是管理密钥和证书
CA原理:服务器一般需要将其公钥发送给CA,由CA使用CA自己的私钥将请求服务器的公钥加密,在加上数字签名等相关信息,然后生成一个证书,将这个证书发送给服务器,在服务器与客户端通信的时候,就将自己的证书发送给客户端,如果客户端能使用CA的公钥解密这个证书,那么就可以验证这个证书是合法的(因为是证书权威机构发的),同时也能够获取到服务器的公钥。那么如何信任CA的公钥:最安全的办法就是到证书颁发机构去拷贝其公钥
至此,数据的完整性和身份验证都可以得到较高安全程度的保证,那么如何保证数据的机密性:在可靠的获取到了对方的公钥自后,可以自己生成一段随机数,使用对方公钥加密这段随机数,那么就只要对方可以机密这段随机数(因为只有公钥对应的私钥可以机密),就可以使用这段随机数作为数据对称加密的密钥,并且可以定期更换提高安全性(这就是ssl采用的机制)
SSL:secure socket layer,安全的套接字层
TLS: transport layer security,传输层安全
ssl或者是tls都是杂谈tcp/ip模型中的应用层和传输层之间附加了一个层次,因为很多应用层协议都是明文的(httpd,ftp,smtp等),那么在向下层传递封装的时候,就可以通过调用ssl/tls的相关库文件,加密数据,从而保证数据的安全性,比如https,ftps等,应用层实现的功能和http,ftp都一样,只不过在向下层传递的时候会调用加密库,因此https于http就不再是相同的协议
ssl具体又分为两个层次:1.ssl记录协议:建立在可靠的传输协议上,为高层协议提供数据封装,压缩,加密等功能的支持
2.ssl握手协议:建立在ssl记录协议智商,用于实际传输之前,通信双方进行身份验证,协商加密算法,交换加密协议
下面以HTTP和HTTPS为例分析ssl:
1.传统的http协议在tcp的三次握手之后,客户端就开始发送请求给服务器端进行通信
2.在https协议,首先仍然是tcp协议的三次握手,然后客户端发送ssl会话建立请求
a.客户端浏览器发送ssl会话请求(由于ssl会话是基于ip地址建立的,所以在一个ip地址上只能有一个ssl会话,也就是说在一个ip地址上只能有一个https服务器,可以是中心主机,也可以是众多虚拟主机中的一台)
b.双方协商ssl协议版本,算法等信息
c.server端将自己的证书发送给客户端
d.客户端验证证书合法性
e.客户端使用证书解密得到的公钥加密一段随机生成的随机数发送给server
f.客户端发起https请求(URL请求)
g.server就可以使用该随机数作为密钥加密数据,使用私钥加密指纹等开始发送数据
那么,在linux上如何基于ssl实现httpds或者是其它应用层协议的安全通信?
在liunux上,实现ssl协议的工具是openssl
安装openssl主要会生成:
三段:加密库
ssl相关库文件
openssl工具(可以实现各种加密解密以及创建私有CA)
转载于:https://blog.51cto.com/10764546/1704479