|
看了一下howto,只是讲如何操作,不讲原理,所以不知为何这么做,为何有好几种认证方法。man了一下午,终于有所体会,希望大家看看,指出其中的错误
一、RSA,DSA都是非对称加密方法,DES,3DES,blowfish等都是对称加密方法,md5,sha是hash单向算法;凡是用公钥加密,只能被相应私钥解开
二、网上要安全通信,关键是交换数据要加密,为何不用直接公钥加密,私钥解密呢?比如双方相互交换公钥,发送方用对方公钥加密要发送数据,接收方用相应私钥解密,很简单么?但是用公钥加密数据的计算量巨大,不适合批量数据,所以采取对话建立时利用公私钥来传送一个对称加密方法的key,以后的通信都是用这个对称加密法和这个确定的key加密来进行的
三、具体大致如下(忽略协商版本等细节):设 Server Slient 要通信
1、C -----------------------------> S
C提出要和S加密通信
host_key.pub
cookie
2、C <----------------------------- S
S把自己的公钥(host_key.pub)、一个随机的cookie数给C
加密的session_key
3、C ------------------------------> S
C利用cookie和收到的公钥计算一个session_id ,
C自己产生一个session_key,用公钥加密,传给S
利用session_key加密的数据
4、C <-----------------------------> S
S用私钥解开session_key
S用cookie和公钥同样计算session_id,应该和C计算出的一致
S用session_key和C开始在唯一session上加密数据通信
不知我这样是否理解对了,请大虾们指点
另外有2个问题,从上面过程来看,
虽然从4开始CS之间就是安全的了,但并不能保证第4阶段里C就是第1阶段的C,很明显看2、3,并不能保证C就是第一个的C,只要能伪装IP就可以顶替了
所以ssh2协议里除了一个用public key authentication的办法
就是C也向S提供自身的key.pub用来验证是否是真正想通信的用户,比用口令验证更加好些
另外当利用public key方式进行用户认证时,也会问密码,这个密码是ssh-keygen时输入的passphrase,我的理解这个密码并没有通过网络传送,而是在本地验证,目的是来保护这个存在客户端的private key的,而通过password方式认证时,password是加密后在网上传送的,对吗?
凡是私钥, 如 host_rsa_key,host_dsa_key,$home/.ssh/id_rsa,id_dsa 的属性都必须是600,
而公钥 如 host_rsa_key.pub $/HOME/.ssh/id_rsa.pub等属性必须是644,sshd才能正常工作,不符合,sshd拒绝认证,这点man中并不清楚,我是错了好些次,在检查log时发现的 |
|