`
zhouzhk
  • 浏览: 94702 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SSO-文档收藏之Kerberos(三)-kerberos5原理与操作

阅读更多

上海汉中技术论坛 → 技术交流 → Linux → kerberos原理

baiyuliu
等级:版主
文章:56
积分:588
注册:2006年12月19日

2007-6-29 22:04:16

 

第一部分 Kerberos 协议介绍
  1.Kerberos 协议简介
    在希腊神话中, Kerberos是守护地狱之门的三头狗。在计算机世界里,美国麻省理工学院(MIT)把他们开发的这一网络认证系统命名为 Kerberos。 Kerberos认证协议是由美国麻省理工学院(MIT)在80年代首先提出并实现的,是该校Athena计划的一部分。因为Kerberos是一个三方认证协议,根据称为密匙分配中心(KDC)的第三方服务中心来验证网络中计算机相互的身份,并建立密匙以保证计算机间安全连接。Kerberos协议基本上是可行的并且有效的。KDC有两个部分组成:认证服务器AS和票据授权服务器TGS。Kerberos是一种网络认证协议,允许一台计算机通过交换加密消息在整个非安全网络上与另一台计算机互相证明身份。一旦身份得到验证,Kerberos协议将会给这两台计算机提供密匙,以进行安全通讯对话。Kerberos协议可以认证试图等录上网用户的身份,并通过使用密匙密码为用户间的通信加密。总的来说,Kerberos 是一种基于私钥加密算法的,需要可信任的第三方作为认证服务器的网络认证系统。它允许在网络上通讯的实体互相证明彼此的身份,并且能够阻止旁听和重放等手段的攻击。不仅如此,它还能够提供对通讯数据保密性和完整性的保护。
  Kerberos从提出到今天,共经历了五个版本的发展。其中版本1到版本3主要由该校内部使用。当它发展到版本4的时候,已经取得了在MIT校园外的广泛认同和应用。由于版本4的传播,人们逐渐发现了它的一些局限性和缺点(例如适用网络环境有限, 加密过程存在冗余等等).MIT充分吸收了这些意见,对版本4进行了修改和扩充,形成了今天非常完善的版本5。现在可以MIT提供的Kerberos V5的最新实现是版本krb5 1.3.3,本文中提到的实现都是以它为依据的。  
  2.Kerberos协议术语解释
  Principal:在Kerberos中,Principal是参加认证的基本实体。一般来说有两种,一种用来表示Kerberos数据库中的用户, 另一种用来代表某一特定主机,也就是说Principal是用来表示客户端和服务端身份的实体, Principal的格式采用ASN.1标准,即Abstract Syntax Notation One,来准确定义),Principal是由三个部分组成:名字(name),实例(instance),REALM(域)。比如一个标准的 Kerberos的用户是:name/instance@REALM 。
  Name:第一部分。在代表客户方的情况,它是一个用户名;在代表主机的情况,它是写成host。  
  Instance:第二部分。对name的进一步描述,例如name所在的主机名或name的类型等,可省略。它与第一部分之间用‘ / ’分隔,但是作为主机的描述时写成host/Instance。  
   Realm:第三部分。是Kerberos在管理上的划分,在 KDC中所负责的一个域数据库称作为Realm。这个数据库中存放有该网络范围内的所有Principal和它们的密钥,数据库的内容被Kerberos 的认证服务器AS和票据授权服务器TGS所使用。Realm通常是永远是大写的字符,并且在大多数Kerberos系统的配置中,一般Realm和该网络环境的DNS域是一致的。与第二部分之间用‘@’分隔,缺省为本地的Realm。
  比如,Principal “ cnhawk/hawk.the9.com@THE9.COM ” 表示Realm “ THE9.COM ”中主机hawk.the9.com上的用户cnhawk ,而Principal “ host/hawk.the9.com @THE9.COM ” 则通常用来表示Realm “ THE9.COM”中主机hawk.the9.com。
  Credential:Ticket和与它相联系的会话密钥合在一起称为Credential。之所以有这个概念是因为它们是客户端在向服务器证明自己的身份时必需的两样东西.在一个Ticket的生存期内客户端会将这两样东西以Credential为单位保存在一个Cache文件中。
  Ticket:一 个Ticket是一个用于安全的传递用户身份所需要的信息的集合。它不仅包含该用户的身份,而且包含其它一些相关的信息。一般来说,它主要包括客户方 Principal,目的服务方Principal,客户方IP地址,时间戳(分发该Ticket的时间),该Ticket的生存期,以及会话密钥等内 容。它的格式亦用ASN.1来准确定义。
  Authenticator: 在客户端向服务端进行认证时,伴随Ticket一起发送的另外一个部分,它的作用是证明发送Ticket 的用户就是拥有Ticket的用户,即防止重放攻击。它的主要内容是一个时间戳(客户端发送Ticket的时间),在rfc1510中有它的完整的 ASN.1定义。
  AS(Authentication Server): 为用户分发TGT(Ticket Granting Ticket)的服务器。
  TGT(Ticket Granting Ticket): 用户向TGS(Ticket Granting Server)证明自己身份的Ticket.
  TGS(Ticket Granting Server):为用户分发到最终目的Ticket的服务器,用户使用这个Ticket向自己要求提供服务的服务器证明自己的身份。在实现上,AS和 TGS实际上是由同一程序完成的,因为它们的实现机制并没有太大的差别,只是在加密所发出的Ticket时所使用的密钥不同(AS使用用户的密钥,而 TGS使用会话密钥)。
  KDC(Key Distribution Center):密钥发放中心,通常将AS和TGS统称为KDC,有时也把AS 单独称为KDC。
  3.认证过程
  1) Client → KDC:用户cnhawk向密钥分配中心(KDC)申请TGT;
  2) KDC → Client:通过KDC的用户密码认证,cnhawk得到KDC发放的TGT;
  3) Client → KDC:申请取得用户cnhawk所需要的host/s;
  4) KDC → Client:KDC根据用户cnhawk提供的TGT,KDC向cnhawk发放host/s;
  5) Client → Server:用户cnhawk向Server提供cnhawk,TGT和host/s ;Server根据主机的上保存的host/s和用户cnhawk的信息来验证cnhawk的登陆申请。
  6) Server → Client:Server确认,发送信息给Client允许cnhawk登陆Server。
  4.一个应用实例
  为了更清楚的说明Kerberos 5认证协议,实际应用中的例子(具体例子可以在我们后边的实际应用中看到):假设某一局域网A,它的DNS域为the9.com;Realm为 THE9.COM;Kerberos的数据库,AS以及TGS服务器都在主机test1.the9.com上。A中主机test2.the9.com上的用户cnhawk对应的Principal为cnhawk/test2.the9.com@THE9.COM;A中的另一台主机 test3.the9.com上的telnet服务器对应的Principal为host/test3.the9.com@THE9.COM。 Rlogin的客户端程序telnet和服务端程序telnetd都是支持Kerberos的,即都支持Kerberos认证协议。cnhawk想用 telnet远程登录到A中的另一台主机test3.the9.com上这时cnhawk所要完成的步骤是:
  ① 运行kinit程序。kinit程序的作用是向AS申请TGT,并将获得的TGT和会话密钥放在保存Credential的文件中。为此,cnhawk在命令行上键入:
  % kinit cnhawk/test1.the9.com
  kinit程序在收到AS发回的消息后,就提示cnhawk输入password:
  % kinit cnhawk/test1.the9.com

cnhawk/test1.the9.com@THE9.COM's Password:
  在cnhawk正确的输入password后,kinit程序将这个password用约定的算法转化为cnhawk的密钥,并用这个密钥解密从TGS 发回的消息,从而获得下一步使用的Credential。到此,kinit程序结束。由此可见,cnhawk的password并没有在网上传输,在网上 传输的只是由cnhawk的密钥加密后的东西。
  ② 运行telnet的客户端程序telnet,为此cnhawk在命令行上键入:
  test1# telnet -a -l cnhawk test3.the9.com telnet程序首先在保存Credential的文件中寻找未过期的TGT,并把它交给TGS,从而获得访问test3.the9.com上 rlogin服务的Ticket。接下来,它把这个Ticket和Authenticator一起发送给test3.the9.com的服务器程序 telnetd。telnetd在验证了cnhawk的身份后,就搜索本地cnhawk主目录下的文件“.k5login”,在“.k5login”文件 中放有允许用rlogin远程登录到cnhawk帐户下的Principal。在找到了cnhawk/test1.the9.com@THE9.COM之 后,telnetd就申请一个虚拟终端,并fork一个shell,这时在test1.the9.com的终端上就会显示:
  test1# telnet -a -l cnhawk test3.the9.com
  Trying test3.the9.com...
  Connected to test3.the9.com.
  Escape character is '^]'.
  [ Trying mutual KERBEROS5 (host/test3.the9.com@THE9.COM)... ]
  [ Kerberos V5 accepts you as `` cnhawk/test1.the9.com@THE9.COM'' ]
  FreeBSD/i386 (test3.the9.com) (ttyp1)
  %id
  uid=1001(cnhawk) gid=0(wheel) groups=0(wheel)

 

  第二部分 Kerberos 5安装和应用

1.系统安装
需要安装两台FreeBSD 5.2.1的系统,一台FreeBSD 4.9 三个系统我是用虚拟机上安装的。
测试机A
操作系统:FreeBSD test1.the9.com 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE

#0: Mon Feb 23 20:45:55 GMT 2004 root@wv1u.btc.adaptec.com:/usr/obj/usr/src/sys/GENERIC i386
  IP地址:192.168.0.2
  机器名:test1.the9.com
  测试机B
  操作系统:FreeBSD test2.the9.com 4.9-RELEASE FreeBSD 4.9-RELEASE #0: Mon Oct 27 17:51:09 GMT 2003 root@freebsd-stable.sentex.ca:/usr/obj/usr/src/sys/GENERIC i386
  IP地址:192.168.0.3
  机器名:test2.the9.com
  测试机C :
  操作系统:FreeBSD test3.the9.com 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE #0: Mon Feb 23 20:45:55 GMT 2004 root@wv1u.btc.adaptec.com:/usr/obj/usr/src/sys/GENERIC i386
  IP地址:192.168.0.1

用户添加完成以后进行本地测试。
  hawk# kinit cnhawk/test1.the9.com@THE9.COM
  cnhawk/test1.the9.com@THE9.COM's Password:
  hawk# klist -f
  Credentials cache: FILE:/tmp/krb5cc_0
  Principal: cnhawk/test1.the9.com@THE9.COM
  Issued Expires Flags Principal
  Jun 7 17:12:21 Jun 8 03:12:21 I krbtgt/THE9.COM@THE9.COM
  我们可以看到本地已经拿到票据了。
  下面添加测试机B的域名地址信息,就是允许测试机B能登陆测试机A。 特别注意Kerberos必须使用域名来访问机器。如果使用IP添加主机会出现一些意外的问题。
  test1# kadmin -l
  kadmin> add --random-key host/test1.the9.com //说明添加的是主机不是用户
  Max ticket life [1 day]:
  Max renewable life [1 week]:
  Principal expiration time [never]:
  Password expiration time [never]:
  Attributes []:
  kadmin> ext host/test1.the9.com
  kadmin> ext --keytab=/tmp/the9.keytab host/test1.the9.com
  这样完成以后就好了,基本配置已经结束了,可以使用。
  调试
  我们开始使用Kerberos的认证部署网络服务,注意Kerberos通过修改用户主目录下的.klogin和.k5login文件,将你允许登陆的用户Principal添加在文件里就好了。
  test1# cat .k5login
  # $FreeBSD: src/etc/root/dot.k5login,v 1.1 2003/04/30 20:58:49 markm Exp $
  #
  # user1/root@YOUR.REALM.WHEREVER
  # user2/root@YOUR.REALM.WHEREVER
  cnhawk/test1.the9.com@THE9.COM
  这样就可以了
  使用Kerberos认证的telnet
  修改/etc/inetd.conf 添加
  telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user
  然后开启
  test2# inetd
  然后从test1登陆test2
  test1# kinit cnhawk/test1.the9.com //先取得票据
  cnhawk/test1.the9.com@THE9.COM's Password:
  test1# klist –f //看看是不是取得
  Credentials cache: FILE:/tmp/krb5cc_0
  Principal: cnhawk/test1.the9.com@THE9.COM
  Issued Expires Flags Principal
  Jun 11 16:21:36 Jun 12 02:21:36 I krbtgt/THE9.COM@THE9.COM
  //可以了
  test1# telnet -a -l the9 192.168.0.3 //开始登陆
  Trying 192.168.0.3...
  Connected to test2.the9.com.
  Escape character is '^]'.
  [ Trying mutual KERBEROS5 (host/test2.the9.com@THE9.COM)... ]
  [ Kerberos V5 accepts you as `` cnhawk/test1.the9.com@THE9.COM'' ]
  FreeBSD/i386 (test2.the9.com) (ttyp1)
  //登陆欢迎词
  %id
  uid=1001(the9) gid=0(wheel) groups=0(wheel)
  % //好了成功了
  使用Kerberos认证的ssh
  修改测试A,B,C的sshd 配置文件。
  # Kerberos options
  KerberosAuthentication yes
  KerberosOrLocalPasswd yes
  然后重启sshd
  Test2#kill –HUP 80
  开始从test1登陆到test2,因为只有ssh1支持Kerberos,所以使用ssh1连接同时开启debug信息。
  test1# ssh -1v the9@test2.the9.com
  OpenSSH_3.6.1p1 FreeBSD-20030924, SSH protocols 1.5/2.0, OpenSSL 0x0090703f
  debug1: Reading configuration data /etc/ssh/ssh_config
  debug1: Rhosts Authentication disabled, originating port will not be trusted.
  debug1: Connecting to test2.the9.com [192.168.0.3] port 22.
  debug1: Connection established.
  debug1: identity file /root/.ssh/identity type -1
  debug1: Remote protocol version 1.99, remote software version OpenSSH_3.5p1 FreeBSD-20030924
  debug1: match: OpenSSH_3.5p1 FreeBSD-20030924 pat OpenSSH*
  debug1: Local version string SSH-1.5-OpenSSH_3.6.1p1 FreeBSD-20030924
  debug1: Waiting for server public key.
  debug1: Received server public key (768 bits) and host key (1024 bits).
  debug1: Host 'test2.the9.com' is known and matches the RSA1 host key.
  debug1: Found key in /root/.ssh/known_hosts:3
  debug1: Encryption type: 3des
  debug1: Sent encrypted session key.
  debug1: Installing crc compensation attack detector.
  debug1: Received encrypted confirmation.
  debug1: Trying Kerberos v5 authentication.
  debug1: Kerberos v5 authentication accepted.
  debug1: Requesting pty.
  debug1: Requesting shell.
  debug1: Entering interactive session.
  Last login: Fri Jun 11 16:31:14 2004 from test1.the9.com
  Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
  The Regents of the University of California. All rights reserved.
  FreeBSD 4.9-RELEASE (GENERIC) #0: Mon Oct 27 17:51:09 GMT 2003
  FreeBSD/i386 (test2.the9.com) (ttyp1)
  //登陆欢迎词
  %id
  uid=1001(the9) gid=0(wheel) groups=0(wheel)
  % //好了成功了
  测试已经完成了。可以使用Kerberos了。
  ftp 服务
  %kinit cnhawk/test1.the9.com
  Cnhawk/test1.the9.com @THE9.COM's Password:
  %klist -f
  Credentials cache: FILE:/tmp/krb5cc_1001
  Principal: cnhawk/test1.the9.com@THE9.COM
  issued Expires Flags Principal
  Jun 11 18:49:56 Jun 12 04:49:56 I krbtgt/THE9.COM@THE9.COM
  %/usr/local/bin/ftp -v hawk.the9.com
  Connected to hawk.the9.com.
  220 hawk.the9.com FTP server (Version 5.60) ready.
  334 Using authentication type GSSAPI; ADAT must follow
  GSSAPI accepted as authentication type
  GSSAPI authentication succeeded
  Name (hawk.the9.com:cnhawk):
  232 GSSAPI user cnhawk@THE9.COM is authorized as cnhawk
  Remote system type is UNIX.
  Using binary mode to transfer files.
  ftp>
  好了FTP也可以接受登陆
  总结
  Kerberos使用中需要注意一些地方,例如,时间一定要保证同步,因为Kerberos靠时间戳来保持同步,时间允许的飘溢量非常小。所以必须保证时间的准确。
  cnhawk# kinit cnhawk/test1.the9.com@THE9.COM cnhawk/test1.the9.com@THE9.COM's Password: kinit: krb5_get_init_creds: time skew (314) larger than max (300) cnhawk# ntpdate time.the9.com 7 Jun 16:59:49 ntpdate[623]: step time server 61.129.93.5 offset 211.348035 sec cnhawk# kinit cnhawk/test1.the9.com @THE9.COM cnhawk/test1.the9.com@THE9.COM's Password:
  而且很多时候在登陆前要查看票据是不是过期了。
  hawk# klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: cnhawk/test1.the9.com@THE9.COM
  Issued Expires Principal
  Jun 7 17:19:25 >>>Expired<<< krbtgt/THE9.COM@THE9.COM
  Jun 7 17:20:23 >>>Expired<<< host/cnhawk.the9.com@THE9.COM
  同时要注意认证时候不只是认证用户信息,还有主机信息,要保证这两个信息都在KDC中心数据库上存储。这样才能保证用户取得票据以后能顺利登陆服务器。

 

分享到:
评论

相关推荐

    SSO-Single-Sign-on实战.docx

    SSO可以分为Web SSO和桌面SSO两种,Web SSO是指客户端的单点登录,而桌面SSO是指操作系统级别的单点登录。 1. SSO原理 SSO的主要特点是,SSO应用之间走Web协议(如HTTP/SSL),并且SSO只有一个登录入口。简单的SSO...

    kerberos 5

    Kerberos 5是一种广泛使用的网络身份验证协议,它在安全的分布式计算环境中提供服务,确保只有经过授权的用户能够访问受保护的资源。这个协议基于票证系统,以加密方式保证了用户身份的验证和通信过程的安全性。下面...

    kerberos java system

    5. **Kerberos与Java SSO** - 在Java应用服务器中,如Tomcat或WebLogic,可以配置Kerberos Realm,使应用支持SSO。用户只需登录一次,就能访问所有已配置Kerberos的资源。 - Kerberos与Java Web应用程序的整合通常...

    play-module-ad-sso:为 kerberos SSO 播放 2 模块

    这是 kerberos SSO 的 play 2.3 模块,支持回退。 它还包含一个简单的 ldap 类,用于获取用户详细信息并使用用户名和密码进行身份验证。 这是一个简单的示例,说明如何保护 public class Application extends ...

    Implementing Kerberos in a WebSphere Application Server Environmen

    Kerberos的核心特性包括单点登录(SSO)和强大的身份验证机制,这使得它成为许多企业级应用中的首选认证方案。而WebSphere应用服务器是IBM提供的一款高性能的企业级Java应用服务器,用于部署和管理复杂的Java应用程序...

    Kerberos 网络认证协议

    - **Windows Server 2003**:在Windows Server 2003中,Kerberos 5认证机制被广泛应用。系统通过Security Support Provider Interface (SSPI)来实现Kerberos认证,Winlogon组件用于处理单点登录(SSO)功能。 #### 七...

    kerberos 软件包 linux

    1. Kerberos的基本原理: Kerberos基于密钥分发中心(KDC)的概念,它由两个主要部分组成:认证服务器(AS)和票据授予服务器(TGS)。用户首先通过AS获取一个临时的会话密钥,然后使用这个密钥与TGS交互,获取访问...

    Kerberos 单点登录

    2. **互操作性**(Interoperability):基于IETF的RFC 1510及其修订草案,微软的Kerberos实现遵循标准,与其他遵循该标准的系统具有良好的互操作性。 3. **高效的身份验证**:与NTLM相比,Kerberos减少了服务器对域...

    kerberos.rar_Kerberos_kerberos Java_single_sso java

    Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和...

    Domino-SSO.rar_SSO domino_domino

    5. **客户端配置**:在用户计算机上安装并配置Lotus Notes客户端,使其能够与SSO策略兼容。这可能包括修改Notes.ini文件,添加必要的SSO参数。 6. **测试和调试**:配置完成后,进行详尽的测试以确保SSO功能正常...

    rundeck-sso-guide

    Rundeck SSO指南这是使用 , 和在企业... 在Rundeck主机上: 安装Apache,Kerberos客户端工具和gss-api apache模块: yum install -y krb5-workstation httpd mod_auth_gssapi 要配置Kerberos,请编辑/etc/krb5.conf

    SSO(单点登录) 技术的实现

    本文将详细讲解SSO的工作原理、常见实现方式以及其在实际应用中的挑战。 ### SSO工作原理 SSO的核心是中央认证服务(CAS,Central Authentication Service)。当用户尝试访问受保护的资源时,会被重定向到CAS...

    单点登录SSO的参考资料

    2. **互操作性**:SSO系统需要与其他系统和应用程序兼容,因此,选择一个开放标准如SAML或OAuth是重要的。 3. **用户体验**:设计良好的SSO系统应该尽可能透明,用户应能无缝地从一个应用跳转到另一个应用。 4. **...

    Kerberos安装教程及使用详解

    Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和...

    SSO分布式系统单点登陆入门到基础到原理实战

    ### SSO分布式系统单点登录入门到基础到原理实战 #### 一、SSO(Single Sign-On)概念 SSO,即单点登录(Single Sign-On),是一种基于Web的应用程序认证处理方法。用户只需进行一次身份验证即可访问多个应用系统。...

    sso 单点登录原理文档附带流程图片

    "SSO单点登录原理文档附带流程图片" 单点登录(SSO)是一种用户认证机制,允许用户在访问多个应用系统时,只需要输入一次用户名和密码。这种机制可以减少用户登录的时间和出错的可能性,提高工作效率和安全性。 ...

    java抢票器源码-kerberos-demo:用于SSO的SpringSecurityKerberos的SpringBoot演示

    java抢票器源码kerberos 演示 用于 SSO 的 Spring Security Kerberos 的 Spring Boot 演示 此示例将向您展示如何: 在 Windows 环境中使用 Kerberos 构建 SSO 此应用程序在 Windows 7 桌面上运行测试 AD 是 Windows ...

    CAS SSO 原理

    综上所述,CAS SSO原理是通过中心化的认证服务器和分散的客户端协同工作,实现了用户只需一次登录即可访问多个应用系统的功能。这种设计既方便了用户,又简化了系统管理员的身份管理,同时保持了一定的安全性。然而...

    SSO.rar_domino_sso

    在"SSO.rar_domino_sso"这个主题中,我们将深入探讨如何实现J2EE应用服务器(如IBM WebSphere、Oracle WebLogic等)与Lotus Domino服务器之间的SSO整合。 一、SSO的基本原理 SSO的核心思想是通过共享一种安全的...

    推荐给大家 sso介绍

    3. **统一的认证与权限信息库**:为了支持SSO,需要建立一个中心化的用户信息管理系统,用于存储用户的认证信息和权限设置。这样可以确保所有应用系统都基于一致的安全策略进行操作。 综上所述,SSO技术不仅可以...

Global site tag (gtag.js) - Google Analytics