什么是 SSH

SSH(Secure Shell)是为远程登录, 远程通信等设计的安全通信协议。是建立在应用层和传输层基础上的安全协议,主要用于计算机之间的加密登录。
SSH 提供身份认证,加密通信,完整性校验等功能.。(从定义和描述来看,是不是很像 HTTPS 中的 SSL 协议。)

为什么选择 SSH

互联网通信如果选择明文传输,一旦被截获,内容就暴露无遗。(设想一下: 登录过程当中,密码明文传输,一旦被截获密码,就有人可以冒充你登录。)
为了保证互联网的通信安全,那必然是要加密。

加密的方式可以分为两种 : 对称加密和非对称加密 。

对称加密 : 加密和解密使用同一个密钥。 (黑客如果不知道密钥,即便获取了信息,无法解密,也就无法获取通信内容。但是这样也带来一个问题,如何保存密钥。所有的客户端都是用同一个
密钥 ? 数量庞大的客户端,很难保证密钥不被窃取,一旦某个客户端密钥被窃取,黑客就能破解所有客户端信息,不安全 ! 一个客户端维护一个密钥 ? 维护成本太高了 ! 试想一下,
几十、上百万的客户端,不易维护 ! 因此,引申出来非对称加密 。

非对称加密 : 加密和解密使用不同的密钥。这两个密钥分别称为 “公钥” 和 “私钥” 。其特性为公钥加密的数据,使用私钥才能解密。私钥加密的数据,使用公钥才能解密。公钥在互联网上传输,私钥服务器持有。
这样又引申出来一个问题 ,公钥在互联网上传输,如何保证客户端接受的公钥是目标服务端的呢,也就是说如何保证公钥不被拦截、篡改呢 ? 举个例子: 中间人攻击,即黑客伪装成客户端接收服务器的公钥,然后伪装成服务端,将自己的公钥传递给客户端。这样服务端和客户端之间的通信都是通过中间人 , 那么数据也就泄露了 。

HTTPS 是如何防止公钥被篡改呢 ?

HTTPS 引入了”数字证书” 。在说数字证书之前先说一下数字签名,因为这两个概念容易混淆。

数字签名的作用 : 保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
数字签名 : 数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字签名是个加密的过程,数字签名验证是个解密的过程。

同样有个问题,我们需要证明数字签名的合法性。因此我们引入了数字证书。
数字证书 : 数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数

这里还有个问题 ,你又如何保证”数字证书”的合法性呢 ?
浏览器或移动操作系统内置了信任的根证书,只要证书为信任根颁发的或者是信任根的二级证书颁发机构颁发的。并且数字证书在有效期内(没有过期)、证书没有被吊销。那么数字证书
就是合法的。

SSH

因为不像 HTTPS 协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
SSH 以非对称加密实现身份验证。身份验证有多种途径,例如其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。
其实 SSH 连接 Github 就是使用的第二种方式。

流程讲述下 ,无密码登录。
Client 将自己的公钥存放在 Server 上,追加在文件 authorized_keys 中。
Server 端接收到 Client 的连接请求后,会在 authorized_keys 中匹配到 Client 的公钥 pubKey,并生成随机数R,用 Client 的公钥对该随机数进行加密得到 pubKey(R),然后将加密后信息发送给 Client 。
Client 端通过私钥进行解密得到随机数 R,然后对随机数 R 和本次会话的 SessionKey 利用 MD5 生成摘要 Digest1,发送给 Server 端。
Server 端会也会对 R 和 SessionKey 利用同样摘要算法生成 Digest 2。
Server 端会最后比较 Digest1和Digest2是否相同,完成认证过程。

总结

在了解 SSH 原理之前。必须对下列知识的概念有所掌握。

  • 对称加密和非对称加密
  • 数字签名和数字证书
  • HTTPS 原理

转自SSH 原理 - ilpanda - CDN