2013-04-02 45 views
0

我想了解SSH授权方法是如何工作的,因为我正尝试使用gitolite设置git服务器。使用公钥和私钥进行SSH通信

据我所知,gitolite将使用ssh授权用户并授予他们访问具有个人写入和读取权限的特定存储库的权限。但我对授权如何工作感到困惑。

我在YouTube上观看过一些视频,他们用一些颜色比喻来解释。如果我理解正确,对于两个以秘密方式彼此沟通的人,他们需要一个秘密和公共密钥。

这两个人彼此认识对方的公钥,并彼此沟通他们同意使用一个公钥。为建立连接,他们使用相同的公钥将私钥加密,并将结果发送给对方。当他们收到结果时,他们会将私钥添加到该消息中,并像魔术一样获得相同的消息。

但我不认为我理解这个权利,因为我看不到服务器如何验证客户端。我知道服务器必须持有将连接到他的客户端的公钥,但他也有私钥?

当客户端尝试连接到服务器时,他会发送使用其公钥加密的私钥,服务器使用客户端公钥将其私钥加密并发送给客户端?

服务器如何检查用户是否真的是他?我还读到,要解密用公钥加密的信息,只有持有私钥的人才能解密该消息。那么,如果服务器没有客户私钥,服务器如何解密客户端发送的消息呢?

如果有人能够解释我如何使用这个公钥和私钥来验证,授权和交换信息,我会非常高兴。

回答

4

SSH作品大致如下。请注意,这只是一个高层次的解释:

每一方都有两个密钥:公钥和私钥。公钥/私钥在数学上是相关的,因此它们在功能上是相反的。因此,一个人执行的操作只能由另一个人完全撤销。这很复杂,但想象它就像计算x^nnn与x的第nn个根一样。前者很容易,但后者很困难,因此在计算上不可能用足够的准确度来推测操作。这为我们提供了一些令人满意的属性,允许SSH与他们进行以下操作:

客户端连接到服务器。服务器通过提供使用其私钥签名的证书来证明其身份。客户端使用服务器的公钥解密证书,并知道只有客户端可以加密它,因为它需要私钥。然后,服务器对客户端提供的证书执行相同操作。只有在使用可信第三方管理公钥的情况下才能100%确保识别。没有第三方,只能检测到标识变化。

现在验证身份后,服务器会生成一个对称密钥,使用客户端的公钥对其进行加密,然后将其发送给客户端(由于客户端需要私钥,因此唯一可以解密消息的客户端) 。从这一点开始,客户端和服务器都拥有对称密钥,并且所有通信都使用此密钥进行加密。这是出于性能原因完成的,因为对称加密操作比不对称操作快大约100倍。

这就是SSL如何验证身份并加密信息。请注意,更高级别的应用程序(如* nix文件权限)提供更细粒度的访问控制,而不是SSL。

0

此主题的解释对于Stackoverflow格式有点过分。

几天前Coursera上加密(第一部分),说明正是你感兴趣的问题开始了免费课程。

欢迎您来我cryptography course寻找答案的提问