浅谈SSH和HTTPS

SSH

SSH全称Secure Shell,安全外壳协议,是一种加密传输协议。它是Telnet的替代产品,Talnet全程明文传输,易受到中间人的攻击。

SSH密码登录

  1. 用户请求登录远程主机,远程主机将自己的公钥发给用户。
  2. 用户将远程主机的用户密码使用公钥加密发至远程主机。
  3. 远程主机使用私钥解密,如果用户与密码正确则允许登录。

这里有一个问题,如果中间人伪造成远程主机,将fake public key发给用户,然后用户将远程主机信息加密之后发到中间人,中间人用私钥解密,那就得到了远程主机的信息,所以在第一次连接远程主机的时候,会有一个警告。

1
2
3
The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?

这就是警告你,大家都不知道这个rsa key对不对,继不继续由你自己选择。

公钥登录

  1. 用户自己生成一套密钥,包含私钥和公钥
  2. 远程主机将用户的公钥保存下来
  3. 用户请求连接远程主机,服务器返回一个加密数据,由随机字符串R和公钥生成
  4. 用户使用自己的私钥解密,得到字符串R
  5. 用户生成字符串R的摘要digest,发给远程主机
  6. 远程主机使用相同的方法对R进行获取digest,一致则允许登录

这种方法就好得多了,只要你私钥不丢,没有人能登录你的远程主机。

其他的东西

.ssh/config可以对host使用指定的私钥,例如

1
2
3
4
[email protected]:~$ cat .ssh/config
Host github.com
Hostname github.com
IdentityFile ~/.ssh/deploy_key

当ssh [email protected]的时候,就会使用deploy_key进行认证。

如果是远程主机给你公钥,而不是你把公钥给它,那么用这个命令登录。

1
ssh -i publickey

HTTPS

HTTP + TLS/SSL,只写一点简单的流程,关于CA证书,下次再写。

简化流程

  1. client向server请求一个网站
  2. server回复一个public key
  3. client验证public key
  4. 通过public key对对称密钥加密,发至server
  5. server解密得到对称密钥
  6. 全程开始对称加密传输

由于非对称加密教耗费性能,所以整个流程只有在传输密钥的时候加密解密了一次。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×