安全知识总结

加解密算法

对称加密: 用同一个秘钥进行加密和解密,代表算法有AES/DES/RC2/RC5等;

非对称加密: 一次产生公钥和私钥两个秘钥,任意一个都能进行加密,解密则需要用另外一个。具体的用法是:公钥用来“加密”(相应的私钥用来解密),私钥用来“签名”(相应的公钥用来校验)。代表算法有RSA/DSA/ECC/DH等。

摘要: 摘要是对数据计算Hash值,Hash值不可逆,是一种单向加密。shadow文件中保存的用户密码就是密码明文的Hash值。代表算法有MD5/SHA256等。

SSL协议

SSL协议工作在传输层和应用层之间。在TCP协议的三次握手之后,进行SSL协议的握手。

SSL握手过程:

  • 客户端发送随机数x和自己支持的加密算法
  • 服务端发送随机数y、公钥和选择的加密算法
  • 客户端发送通过公钥加密的随机数z的密文
  • 客户端、服务端用xyz算出对称加密的密钥
  • 双方进行对称加密通信。

SSH协议

密码登录

  • 主机将自己的公钥(主机密钥HostKey)发到客户端(HostKey路径在sshd的配置文件中配置)
  • 客户端计算公钥指纹(摘要),询问用户是否信任该kostkey,信任则将key值记录在known_hosts中,下次登录相同服务器时若hostkey相同不必再次确认;否则提示hostkey不一致
  • 用户输入密码,客户端使用公钥加密密码明文并发送到服务端,服务端使用私钥解密并进行密码校验。

由于存在发送服务器公钥的过程,因此存在中间人攻击的安全隐患。

公钥登录

SSH公钥登录解决了SSH协议中的中间人攻击的问题。

  • 用户事先生成一对公/私钥,将公钥提前导入到服务器,
  • 登录时,服务器首先发送一个随机数到客户端,
  • 客户端使用私钥加密随机数返回服务端,
  • 服务端使用公钥校验通过则允许登录。

中间人攻击

SSL协议以及SSH密码登录方式,都存在着中间人攻击的威胁,主要安全隐患在于握手过程中服务端发送的公钥可能被中间人截取,客户端不能确定服务端发送的公钥是否可信。

证书

证书解了服务端公钥不可信的问题。

证书中记录了服务器的公钥信息,服务器不直接发送公钥,而是发送从CA中心申请到的证书。CA中心把公钥及其他证书信息一起进行摘要计算,再对其进行签名,最终的证书中存放的是公钥、证书信息、数字签名。

因为有了CA中心的数字签名,只要用相应的CA中心的公钥对签名进行校验(即比较解密后的摘要值和本地计算的摘要值是否相同)通过,就能安全使用公钥进行加密。

CA中心的公钥一般预置在操作系统中的根CA证书中。既然CA中心的公钥是用来对签名进行校验的,那么相应的,这个根CA证书就是用来对服务器发来的证书进行校验的。

证书链

一般我们不会直接拿根CA证书对应的私钥去做证书的签发,因为频繁使用根证书对应的私钥会增加其泄露的可能性。

安全的做法是:CA中心给二级CA中心签发一个证书(即二级CA证书,二级CA中心严格保存其对应的私钥),二级CA中心再给三级CA中心签发证书…依次类推。

因此,服务提供者去N级CA中心签发证书时,生成的不再是证书,而是证书链,证书链中依次记录着服务器证书、N级CA证书、N-1级CA证书…二级CA证书。证书校验时,用根CA证书校验二级CA证书、二级CA证书校验三级CA证书…最后N级校验服务器证书,只有全部校验通过,服务器证书才算被客户端校验通过。

浏览器通过HTTPS协议访问网站的过程

  1. 通过本地的DNS配置文件找到DNS服务器地址。
  2. DNS服务器将网址解析为ip地址返回。
  3. 本机通过链路层的arp协议找到局域网的路由器。(二层)
  4. 路由器通过ip地址路由寻址找到ip地址对应的主机。(三层)
  5. 主机通过TCP协议找到本机的端口号(进程listen)。(四层)
  6. TCP三次握手。
  7. 使用证书进行SSL握手(主机将自己的证书链发到浏览器,浏览器使用操作系统预置CA证书进行校验,校验不通过会提示链接不安全的风险)。(SSL层)
  8. 服务器进程和浏览器进程在应用层使用HTTP协议交换数据。(七层)