SSH
认证:可信地判断出用户的身份,通过SSH登录,需要提供数字身份证明,通过测试后才允许登录
加密:对数据进行加密,除接受者,其他人都无法理解数据
完整性:确保网络上传输的数据到达目的地时,没有被改变
认证是双向的,包含了server 对 client 的验证,也包含了 client 对 server 的验证。
SSH 提供的端到端的加密,基础是随机密钥,每次通过验证后,都会产生一个会话,client 与 server 协商产生随机密钥,发送的数据全部使用该密钥加密。在会话结束后,该密钥被丢弃。对数据加密的算法有: Blowfish / DES / IDEA (对称加密) 等。
授权是认证之后进行的,可以对通过ssh登录的用户权限进行一些限制。
SSL
是一种认证和加密协议,最开始是为了 Web 服务,增强 HTTP 协议的安全性。采用 SSL 的程序通常使用一个证书来表明自己的身份,数字证书的存在说明了有一个可信任的第三方已经对服务器的身份和密钥之间的绑定关系进行了认证。Web 浏览器在进行 SSL 连接时,会自动去第三方服务器查验,检查Web服务器提供的证书是否正确,从而确保Web服务器就是用户想要连接的那个服务器。此后,浏览器和Web服务器之间的传输都是经过加密的了。
从上文的描述看,有一个可信任的“第三方”存在,SSL才是安全可靠的,这种第三方在现实中一般称为 CA (证书管理机构)。
基于TCP通信的程序,可以使用SSL来增强安全性。比如 SSLtelnet / SSLftp .
而 SSH 实现不同于 SSL , SSH 的实现可以和各种用途的工具集成在一起,完全是为了提高安全性而编写的。
密码需要记忆,密码强度要高,并且还要防止泄漏。所以一种更加安全的机制被引入了:用户公私钥登录机制。
通过非对称加密算法,可以得到公钥(public key)和私钥(private key)。
如果数据使用公钥加密,那么只有使用对应的私钥才能解密
如果使用私钥加密(俗称“签名”),也只有使用对应的公钥解密
用户生成自己的公私钥:
$ ssh-keygen
~/.ssh/id_rsa 私钥
~/.ssh/id_rsa.pub 公钥
然后将公钥写入到 Server 的 ~/.ssh/authorized_keys () 文件里。
端口转发
转发或隧道是在一个SSH会话中封装另外一个基于TCP的服务,从而完全利用上SSH的安全传输的特性。
通常支持的转发有三种:
普通的基于TCP的转发
X协议转发
代理转发,允许 client 使用远程主机上的 private key
ssh-agent 认证代理
是一个认证代理程序,运行在后台,用于有多个不同的用户密钥,分别对应不同的服务器上的场景。步骤如下
预先将公钥写入到服务器 authorized_keys 中
在local pc运行 ssh-agent daemon
使用 ssh-add 将密钥转载到代理中
ssh 登录会话,选择需要使用的密钥
Stunnel
为基于TCP的服务增加SSL保护,而不用修改这些程序的源代码。它可以作为任意一个端口上的Daemon进程的封装程序(Wrapper)从inetd中调用,也可以单独运行,从而为特定服务接收网络连接。stunnel对哪些经过SSL到达的用户连接进行认证,如果认证通过,就运行背后的服务程序,并在客户端和服务端程序之间建立一个使用SSL保护的会话。
https://www.stunnel.org/index.html
防火墙
是用来防止特定的数据,进入/离开一个网络的硬件设备或软件设备。例如,位于Web站点和Internet之间的防火墙可以只允许HTTP和HTTPS通信到达该站点。
防火墙也可以屏蔽那些不是来自特定网络地址的TCP/IP数据包。