zoukankan      html  css  js  c++  java
  • kerberos 协议初探

    kerberos原理

    一个客户端要访问某个服务时,先要到KDC去认证自己,并获得访问票据TGT
    然后客户端再拿着这个访问票据到自己真实想要访问的服务去获得访问授权,
    然后真实的进行访问

    在kerberos中,KDC有两部分组成:

    1. Authentication Server,用来认证用户,即验证用户存在,且密码正确
    2. Ticket-Granting Service,用来给客户端生成,可以访问客户端想要访问的那个服务的票据TGT

    三个请求步骤

    整体来看,kerberos分为三个请求来回,假设一个client要访问服务server

    1. client到Authentication Server认证,并获得跟Ticket-Granting Service通信的加密key,Client/TGS SessionKey和能访问Client/TGS SessionKey的票据
    2. client使用Client/TGS SessionKey跟Ticket-Granting Service进行安全通信,获得能访问server票据
    3. client在拿到第二步的票据去访问服务server

    双向验证

    kerberos是双向验证的。实现双向验证的原理:
    其上三步通信中,每一步的请求和返回都包含两个数据。一份是发送方想要获取认证的请求,一份是发送方希望接收方认证自己的请求数据。

    基础术语

    Principals

    在kerberos网络中,认证双方的指代,可以服务,也可以是个人
    Principals是唯一的,KDC是基于Principals来判定它有没有访问某个服务的权限

    一个Principals的基本构造为:
    primary/instance@realm

    其中:

    • primary是具体的用户名或服务名,比如用户名:jdoe, 服务名:nfs
    • instance 是该用户或服务具体的角色/机器定位,比如jdoe/admin, ftp/bigmachine.corp.example.com,后者表示ftp这个服务在bigmachine.corp.example.com这host机器上。特别地,如果primary是一个服务,那么其instance必填。而如果primary是用户,则instance不必填
    • realm 一个逻辑领域,指代kerberos网络的范围,通常是大写域名,比如CORP.EXAMPLE.COM

    以下是一些合法的principal定义

    jdoe
    
    jdoe/admin
    
    jdoe/admin@CORP.EXAMPLE.COM
    
    nfs/host.corp.example.com@CORP.EXAMPLE.COM
    
    host/corp.example.com@CORP.EXAMPLE.COM
    

    Realms

    Realms 是kerberos整个网络的逻辑定义,相当于一个域,所以通常也用域名来定义。Realm可以集成,也可以没有集成但又有相应的关系

    KDC

    存储有所有Principals的账号信息,用于认证用户,并分发Principal A访问Principal B的票据
    KDC本身可以做主从,从而实现高可用

    keytab

    一个存储了Principal信息的文件,其中包含用户名跟加密key(相当于密码)。其目的是,可以通过kinit命令,以脚本的方式去KDC认证,并缓存票据TGT。这样做能够使得一些系统之间的授权成为可能,也使得无人工参与的脚本自动化认证成为可能。因为普通的登录认证,需要用户交互,去输入用户名密码。

    一个典型的kinit命令如下:

    kinit username@ADS.IU.EDU -k -t mykeytab; myscript
    

    mykeytab是Keytab的文件名,由于其中可能有多个principal的账号信息,所以这里显示的基于username@ADS.IU.EDU这个用户id,显示的去找文件中的密码,完成认证。
    认证完后,执行后续想要操作的myscript脚本。

    当日Kinit命令本身也可以不使用Keytab文件,而直接用户交互的方式,去输入密码,完整认证。

    整个kerberos的逻辑视图

    其中clients和Application Servers都是Principal

    参考资料

    http://www.nosqlnotes.com/technotes/kerberos-protocol/

    https://www.zhihu.com/question/22177404

    https://docs.oracle.com/cd/E36784_01/html/E37126/kintro-30.html#scrolltoc
    https://kb.iu.edu/d/aumh

    https://blog.csdn.net/u011026329/article/details/79167884

    https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html

    https://godatadriven.com/blog/kerberos-basics-and-installing-a-kdc/

  • 相关阅读:
    json 拼二维json数组
    lnmp 环境搭建
    lnmp git ruby sass 安装
    制定clone的用户名
    git branch 重命名
    sql命令创建数据库
    layerui
    弹出确认框,打开新窗口
    Ajax请求小结
    .net core注入服务
  • 原文地址:https://www.cnblogs.com/niceshot/p/13199203.html
Copyright © 2011-2022 走看看