GitHub的认证过程(一)

来源:互联网 发布:游族网络实时资金流向 编辑:程序博客网 时间:2024/06/04 19:58

     最近在看Uncle Bob的《敏捷软件开发 原则、模式与实践》。我看技术书籍时有一个习惯:先粗看一遍书中的示例代码,了解代码实现的功能,然后把代码根据自己的理解重写一遍,最后再对比一下自己代码和书中示例代码的区别,从中找出差异并结合作者的论述进行分析。这三个步骤是了解作者思路->自发思考->归纳总结的过程,可以把作者书中的内容经过思考消化为自己掌握的知识,而不只是“知道”这本书。


    为了在家里和公司都可以方便地访问,我使用了最近很流行的GitHub来保存自己的练习代码。在网上有很多GitHub的介绍,GitHub主页上的Step by Step帮助也很详细,根据这些资料,我很快就搭建好了GitHub环境。
    GitHub采用SSH来对客户端进行认证。首先需要设置密匙。设置密匙的操作步骤如下:
    1、在客户端生成密钥对
    $ ssh-keygen -t rsa -C zhaohuabing@gmail.com
    生成的密钥对保存在本地根目录的.ssh目录下的两个文件中
    私钥:id_rsa  
    公钥:id_rsa.pub
    2、将公钥的内容添加到GitHub的Account Settings->SSH Keys中
    
    3、然后就可以对GitHub进行提交代码、更新代码等操作了。


    我有一个缺点,在做一件事的时候,注意力会很容易被和该事情相关的细节吸引,如果自己对该细节感兴趣的话,就会顺着该细节深挖下去,常常忽略了自己最初的目的。我美其名曰:发散式学习,呵呵。 现在我开始对GitHub的认证机制感到好奇,GitHub是如何确认我的本地计算机具有操作权限的呢?
    这事儿问google比较靠谱。我先通过google到的这两个网页学习了加密机制的一些基础知识。
    双匙加密体系介绍 
    电子签名和数字证书 
    很明显,GitHub在用户认证过程中采用了双匙机制,在双匙加密机制中,只有合法用户才拥有私匙,只要GitHub在收到请求时可以证明提交请求的客户端上拥有该私匙,即可以确认该操作是由合法用户发起的。


    GitHub如何能够确认提交请求的客户端计算机上拥有该私匙呢?我推测可能是这样一个过程:
    1、客户端向GitHub主机发起请求,请求中包含了GitHub用户名
    2、GitHub主机通过用户名查找到该用户在Account Settings中设置的公匙
    3、GitHub主机生成一段随机信息, 使用用户的公匙加密后返回给客户端
    4、客户端使用私匙解密GitHub主机返回的信息
    5、客户端把解密后的信息返回给GitHub主机
    6、GitHub主机对比客户端返回的解密信息和原始信息,符合则说明本地计算机拥有私匙,即验证了客户端的身份。

    

     
     采用这个流程进行验证还有一个疑问:GitHub允许用户在Account Setting中加入多个公匙,那么在第2步和第5步中,GitHub主机采用哪一个公匙 来进行加密\解密呢? 前面我们讲到公匙和私匙都保留在本地计算机的.ssh目录下,本地计算机登录时可以把自己的公匙和用户名一起发到GitHub主机。GitHub主机在用户Account Setting的所有公匙中查找本地计算机发过来的公匙。如果存在该公匙,则用该公匙生成加密信息,返回给客户端。



      
   声明一下,本文的内容只是我个人的猜测,GitHub的用户认证机制并不一定就是这样处理的。如果你了解GitHub的认证机制,欢迎联系我一起讨论。

   如果使用该认证机制,还有一个明显的缺陷,不能在多人公用的开发机上使用,因为只要任何人登录这一台保存有私匙的电脑,都可以使用对GitHub代码库进行修改。我想这应该是可以避免的,在下一篇文章GitHub的认证过程(二)中,我们对这一个问题再进行进一步的讨论。

原创粉丝点击