计算机网络-SSH基本原理
最近年底都在忙,然后这两天好点抽空更新一下。前面基本把常见的VPN都学习了一遍,后面的内容应该又继续深入一点。
一、SSH简介
SSH(Secure Shell,安全外壳协议)是一种用于在不安全网络上进行安全远程登录和实现其他安全网络服务的协议。SSH协议由三个组件构成:SSH传输层协议,SSH用户认证协议,SSH连接协议。
其实我们网络工程师对这个应该不陌生,很多的如设备登录、远程等都通过这个协议来进行。我刚开始工作时候是用的telnet,简单快捷但是随着工作的深入,的确还是要注意一下安全的规范,后面就逐渐都使用SSH了,今天来学习下SSH的原理与应用。
1.1 SSH传输层协议
SSH传输层协议是一个安全传输协议。SSH传输层通常建立在TCP/IP连接上,但也可以在任何其他可靠的数据流上建立。
SSH传输层协议协商了所有的密钥交换算法、公钥算法、对称加密算法、消息认证算法等。
算法类别 | 算法功能 | 算法名称 |
---|---|---|
密钥交换算法 | 用于产生会话密钥 | diffie-hellman-group14-sha1, diffie-hellman-group1-sha1… |
公钥算法 | 用于进行数字签名和用户认证 | ssh-rsa,ssh-dss … |
对称加密算法 | 用于会话的加密 | aes128-ctr,3des-cbc … |
消息认证算法 | 用于数据完整性认证 | hmac-sha1,hmac-md5 … |
就是和之前的VPN类似先协商好对应的算法参数。
1.2 SSH用户认证协议
SSH用户认证协议为服务器提供客户端的用户鉴别。它运行在传输层协议上。SSH用户认证协议提供两种认证方法:口令认证和公钥认证。
- 口令认证:客户端通过用户名和密码登录到服务器,完成用户认证。
- 公钥认证:服务器通过公钥解密客户端的数字签名,完成用户认证。
常见的比如密码认证和密钥认证。
1.3 SSH连接协议
SSH连接协议将加密的会话连接多路复用成若干个逻辑通道,它提供了交互式登录会话,远程执行命令,TCP/IP连接转发和X11连接转发等功能。所有通道都复用一个会话连接。
SSH连接协议在SSH传输层和SSH用户认证协议之上运行。
TCP/IP连接转发能够将其他TCP端口的网络数据通过SSH通道来转发,并保证了安全性。
Telnet、SMTP、IMAP和其他一些基于TCP/IP的不安全协议都可以通过SSH转发变得安全,避免了用户名,密码以及隐私信息的明文传输。
X11中的X是X协议,11是X协议的第11个版本。Linux的图形化界面,底层都是基于X协议。
二、SSH的工作原理
在整个通讯过程中,为实现SSH的安全连接,服务器端与客户端要经历如下五个阶段:
- 版本协商阶段:SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本。
- 算法协商阶段:SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的加密算法。
- 密钥交换阶段:通过密钥交换算法生成会话密钥,此后双方的会话均通过会话密钥加密。
- 用户认证阶段:SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证。
- 会话交互阶段:认证通过后,服务器端和客户端进行信息的交互。
2.1 版本协商阶段
客户端和服务器交互SSH版本协商报文,确定V1或V2版本。
服务端打开端口22,等待客户连接。 客户端向服务端发起TCP连接,双方完成握手并建立连接。 客户端向服务端发送第一个报文,包括版本标志字符串,格式为 “协议版本号 次协议版本号 软件版本号”。 服务端收到报文后,解析协议版本号,如果客户端的协议版本号比自己的低,且服务端能支持客户端的低版本,就使用客户端的协议号,否则使用自己的协议版本号。
2.2 算法协商阶段
客户端和服务器交互自己支持的算法列表,该列表包括四种算法的具体算法名称。
算法协商过程为:从客户端的算法列表取出第一个算法,服务器在自身的算法列表中查找,若匹配上相同的算法,则协商成功,继续协商下一种算法;否则继续从客户端的该种算法列表中取出下一个算法,在服务器端的算法列表中匹配,直到匹配成功。
2.3 密钥交换阶段
根据密钥交换算法,双方动态地产生会话密钥用于后续会话加密。会话密钥无法被第三者截获,安全可靠。
2.4 用户认证阶段
密码认证:
用户认证阶段有口令认证和公钥认证两种方式。其中口令认证过程为:客户端发送携带用户名和口令的认证请求,服务器与本地用户数据进行匹配认证。
公钥认证过程为:客户端发送携带数字签名的认证请求,服务器通过公钥解密数字签名进行认证。
2.5 会话交互阶段
用户完成认证后,客户端向服务器发起建立通道请求,进行数据传输。
然后开始数据交互。
总结:SSH协议包括SSH传输层协议,SSH用户认证协议,SSH连接协议。建立连接需要经过版本协商、算法协商、密钥交换、用户认证、会话交互等阶段实现安全的数据交互。下次再来做一些实验来验证。