1. 对称加密与非对称加密算法

1.1 简介

加密算法分为对称加密算法(私钥算法)和非对称加密算法(公钥算法),其必要两个过程分别是加密和解密。

1.2 对称加密算法

加密秘钥和解密秘钥相同的算法称为对称加密算法,常用的对称加密算法有以下几个:

  1. DES:加密共有三种形式,分别为DES-40、DES-56、3DES加密算法(168bit长度加密)
  2. AES:共有三种形式,分别为AES-128、AES-192、AES-256三种长度的加密算法

除此之外,还有CAST、IDEA以及RC-6以及RC-4等对称加密算法。

1.3 非对称加密算法

非对称加密算法会通过算法生成公钥和私钥一对秘钥,其中公钥可以发送给任何人,而私钥只能自己保留。常见非对称加密算法有RSA算法,该算法长度不定,由人手工指定。并且秘钥的数量是发送数据的人数的两倍,比如2个人使用RSA算法互发数据,那么就得4个秘钥即两对秘钥,其中公钥用来加密,私钥用来解密特定公钥加密的数据。 例如,有两个人A和B互发数据,A必须得先用B的公钥对数据进行加密,然后再由B用自己的私钥进行解密即可。
非对称加密算法在加密大型数据时,速度会很慢,这也是它的缺点。

1.4 使用两种加密算法组合来解决数据加密问题概述

可以按照如下过程,使用对称和非对称两种加密算法组合来解决数据加密问题,具体过程如下:

  1. A:使用RSA生成私钥和公钥
  2. B:使用对称加密算法生成秘钥
  3. A将自己的公钥共享给B
  4. B使用A的公钥加密得到的公钥
  5. A使用私钥对数据解密
  6. A使用私钥加密发送的数据
  7. B使用公钥对数据解密
1.5 Hash算法对传输数据做校验

为了防止加密数据在传输过程中被篡改,所以需要使用hash算法对传输的数据进行校验,具体内容如下:

  1. HMAC哈希算法:每个数据包都会在后面写上一个对数据计算后的校验和,如果发现自己计算的校验和与数据包自带的不同,则认为数据发生的偏移,要求对方重传该数据包;
  2. Hash算法的特征在于任何大小的数据计算出的Hash值的长度都是一样的;
  3. Hash多用于认证,认证对等体双方在相互认证时,只需要交换密码的Hash值即可;
  4. 目前的Hash算法:MD5、SHA-1、SHA256、SHA512
1.6 数字签名和数字证书

为了防止数据发送方抵赖曾发送的数据,增加了数字签名和数字证书,在Linux体系中,数字签名就是将要发送数据的哈希值加上自己的私钥进行加密后的结果。安全的数据传输需要做到以下几点:

  1. 传输的数据必须要被加密;
  2. 传输的数据不能被篡改;
  3. 传输的数据必须要有签名;
  4. 必须进行身份认证;
  5. 防止重放攻击;

针对以上这几个方面,主要有以下解决方案:

  1. 数据加密使用加密算法;
  2. 哈希算法;
  3. 数据签名,数字证书(确认这个确实是你);
  4. 随机数(随机值);

2. ssh基础操作与命令格式

2.1 ssh基础操作

ssh是一个协议,全称为secure shell,目前所用的都是ssh2,该协议可以提供远程的连接。并且在windows使用ssh连接Linux或其他远程服务器,必须要指明身份,还需要在/etc/ssh/sshd_config中将PasswordA......字段改为yes,具体如下图:

wireshark ssh核对加密算法 ssh的加密算法_ssh配置文件简介

2.2 ssh命令格式

命令格式ssh username@ip地址 -p 端口,如果不加用户名,直接以ip地址登录,将会默认以当前shell的用户名尝试进行登录,如下:

wireshark ssh核对加密算法 ssh的加密算法_wireshark ssh核对加密算法_02

3. ssh指纹和knownhosts文件详解

3.1 Linux中ssh配置文件相关

在rhel8的系统中,ssh相关的配置文件全部在/etc/ssh目录下,在该目录下面有3对非对称加密秘钥,分别为:

  1. 私钥:ssh_host_ecdsa_key 公钥:ssh_host_ecdsa_key.pub
  2. 私钥:ssh_host_ed25519_key 公钥:ssh_host_ed25519.pub
  3. 私钥:ssh_host_rsa_key 公钥:ssh_host_rsa_key.pub

上面三对秘钥分别是rsa、ed25519、ecdsa,服务端有这些不同的加密算法的文件是为了适配不同种类的客户端所以有多重非对称加密的秘钥。并且该目录下的sshd_config是ssh服务端的配置文件,ssh_config是ssh客户端的配置文件,一般Linux系统自带服务端和客户端,而windows等系统默认不带该客户端。

3.2 生成指纹
  1. 命令格式:ssh-keygen -lf ssh_host_ecdsa_key -E 加密算法名,使用该命令可以生成指定算法的指纹,比如md5就是生成md5格式的指纹。
  2. 说明:通过服务端的私钥来生成指纹,加密算法确定后,指纹是唯一的,当第一次使用ssh连接服务端时,会返回计算出的指纹,然后让你确认这个服务端是不是你真正想要登录的服务端,如果不是,立即退出,也就是说,如果ssh服务器的所有指纹都被删除了,那么客户端将无法建立连接。
  3. 实例:
    ssh-keygen -lf ssh_host_ecdsa_key -E md5:生成md5的指纹
    ssh-keygen -lf ssh_host_ecdsa_key -E SHA1:生成SHA1的指纹
    ssh-keygen -lf ssh_host_ecdsa_key -E SHA2:生成SHA2的指纹
    ssh-keygen -lf ssh_host_ecdsa_key -E SHA256:生成SHA256的指纹
    以第一个命令为例,运行结果分别如下:
3.3 跳过指纹验证

命令格式:ssh -o StrictHostKeyChecking=no ip地址,该命令可以跳过主机检验(指纹验证)。

注: ssh在建立连接时会在/家目录/.ssh/known_hosts文件中保存了对方的公钥,并且还会保存对方的ip地址等信息。也就是说,当使用ssh连接服务端时,会先在自己的家目录下的known_hosts文件中查看是否有相同的地址,如果没有,弹出警示(让用户校验指纹),如果有,直接让用户输入密码,而不需要校验指纹。

例如,当直接进行连接时:

wireshark ssh核对加密算法 ssh的加密算法_windows常用ssh工具_03


而使用上述命令进行连接时:

wireshark ssh核对加密算法 ssh的加密算法_ssh_04

4. ssh配置文件简介

ssh配置文件位于/etc/ssh目录下,名为sshd_config。在修改为ssh配置文件,需要重启sshd服务,因为修改的配置文件只是在内存里,所以需要重启服务以重新加载配置文件。

4.1 ssh配置文件内容

ssh配置文件的内容大体如下所示:

# Port 22  //端口号
# ListenAddress 0.0.0.0   //ssh监听的地址0.0.0.0,就表示监听所有的ipv4地址的22端口
#                                       
HostKey /etc/ssh/ssh_host_rsa_key   //私钥
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PermitRootLogin   yes    //是否允许root通过ssh登录,yes表示允许,no表示不允许
# PubKeyAuthertication yes   //如果为yes,表示支持基于公钥的认证(免密登录)
AuthorizedKeysFile    .ssh/authorized_keys           //表示公钥认证方式开启后,公钥在客户端的存放位置
PasswordAuthentication yes      //如果为yes,表示支持密码认证
#X11Forwarding no   //如果为yes,表示支持x11转发
4.2 修改ssh配置文件内容

在使用vim打开配置文件并修改相应内容并保存退出后,还需要输入以下命令:

  1. setenforce 0
  2. systemctl stop firewalld
  3. systemctl restart sshd

注:/var/log/secure文件中记录了ssh登录操作的日志。

5. ssh基于公钥的认证

secure CRT支持密码、公钥键盘交互和GSSAPI四种认证方式,其中基于公钥认证的方式是比密码更为安全的一种方式,并且这种方式可以不用输入密码(但需要注意的是免密登录只是这种认证方式附带的一个属性)。

5.1 基于公钥的认证过程
  1. 首先将客户端生成的公钥发送到服务端,具体如下:
    在客户端执行命令ssh-keygenssh-keygen -t 加密方式名称来生成公钥,具体如下:
which  to save the key               //密钥对的存放目录
  	 Enter passphrase ........                //私钥的密码,可以设置为空
  	 ....          agin                             //重新输入私钥的密码
  1. 客户端访问服务端的时候直接采用基于公钥的认证方式即可。
  2. 整个登录的过程如下:服务端会在AuthorizedKeysFile文件中找寻客户端的公钥,如果找到公钥,然后通过公钥加密一段随机数,并发送给客户端(这个过程叫作质询报文),客户端通过自己的私钥解密后将其用服务端的公钥加密,然后服务端在用自己的私钥解密后与原来的数据进行比较(这个过程叫质询回复报文),完成上述认证后,直接登录。

附: 在sshd配置文件中,AuthorizedKeysFile ./ssh/....一行指定了基于公钥认证方式的公钥的存放文件。并且只有将公钥传送到具体的某个用户的家目录下,才可以实现该用户的基于公钥的认证。
注:该配置过程仅针对两个Linux系统而言。

6. 基于ssh的工具介绍

6.1 ssh
  1. 命令格式:ssh 用户名@ip command 作用:以指定用户在指定系统上执行command
  2. 实例:ssh root@12.168.135.63 pwd:表示以root用户在12.168.135.63上面执行pwd命令,如果命令较为复杂,可以使用双引号将命令引起来。
6.2 scp命令

该命令主要用于复制文件,有两种大的用法,具体如下:

  1. scp -P 端口号 本地文件路径 username@ip地址:目标路径:将本地文件复制到远程Linux系统上
  2. scp -P 端口号 username@ip地址:想要copy的路径 本地路径:将远程Linux系统上指定的文件拷贝到本地
    上面两个命令常用的参数如下:
  3. -P:端口
  4. -p:保留原文件的修改时间、访问时间和访问权限
6.3 sftp命令

该命令可以连接到远程Linux系统上,命令格式为:sftp -p username@ip地址,进入连接状态后常用的命令如下:

  1. get:想要下载的路径
  2. put:上传文件
6.4 windows常用的基于ssh的工具

windows系统中常用的基于ssh的工具有以下几个:

  1. xshell
  2. secureCRT
  3. WinSCP
  4. MobaxXtem

附: win10已经自带了ssh客户端和服务端了。(需要在应用和功能/可选功能下进行添加,新版本的windows也已经默认自带ssh相关功能)