use*_*910 1 unix security ssh openssh public-key-encryption
我试图了解SSH授权方法是如何工作的,因为我正在尝试使用gitolite设置git服务器.
据我所知,gitolite将使用ssh授权用户并将其访问权限授予具有个人写入和读取权限的特定存储库.但我对授权如何运作感到困惑.
我在YouTube上观看了一些视频,他们使用一些颜色类比来解释.如果我理解正确,对于两个以秘密方式相互通信的人,他们需要一个秘密和公钥.
这两个人彼此了解公钥,并且彼此之间进行通信他们同意使用一个公钥.为了建立连接,他们使用相同的公钥加密它们的私钥,并将结果发送给彼此.当他们收到结果时,他们会将私钥添加到该消息中,就像魔术一样,他们会得到相同的消息.
但我不认为我理解这是正确的,因为我无法看到服务器将如何验证客户端.我知道服务器必须从连接到他的客户端持有公钥,但他还有一个私钥?
当客户端尝试连接到服务器时,他发送用他的公钥加密的私钥,服务器使用客户端公钥加密他的私钥并发送给客户端?
服务器如何检查用户是否真的是他?我还读到,为了解密用公钥加密的信息,只有持有私钥的人才能解密该消息.那么如果客户端没有客户端私钥,服务器如何解密客户端发送的消息呢?
如果有人能够解释我如何使用这个公钥和私钥进行身份验证,授权和信息交换,我会非常高兴.
SSH的工作方式大致如下.请注意,这只是一个高级别的解释:
每一方都有两个密钥:公钥和私钥.公钥/私钥在数学上是相关的,使得它们在功能上是相反的.因此,由一个人执行的操作只能由另一个完全撤消.这很复杂,但想想它就像计算x ^ nnn与x的第n个根一样.前者很容易,但后者很难,因此在计算上不可能以足够的精度猜测撤消操作.这为我们提供了一些理想的属性,允许SSH使用它们执行以下操作:
客户端连接到服务器.服务器通过呈现使用其私钥签名的证书来证明其身份.客户端使用服务器的公钥来解密证书,并且知道只有客户端可以加密它,因为它需要私钥.然后,服务器对客户端提供的证书执行相同的操作.只有使用受信任的第三方管理公钥才能100%保证才能进行识别.如果没有第三方,则只能检测到身份更改.
现在验证了身份,服务器生成对称密钥,使用客户端的公钥对其进行加密,然后将其发送给客户端(由于需要私钥,客户端是唯一可以解密消息的客户端).从此时起,客户端和服务器都具有对称密钥,并且所有通信都使用此密钥加密.这是出于性能原因而完成的,因为对称加密操作比非对称操作快大约100倍.
这就是SSL验证身份和加密信息的方式.请注意,更高级别的应用程序(例如*nix文件权限)提供了更细粒度的访问控制,而不是SSL.