Linux 下 配置Apache使用Windows AD集成认证(SSO)

第一部分:Kerberos 知识-简单理解验证过程

Kerberos是网络授权协议,是设计的很复杂的可防止伪造的安全的身份认证机制.最重要的一点就是密码不会在网络上传输,以防止被窃取.
Kerberos 设计中主要涉及有三个对象,需要服务的Client,提供认证的KDC,和提供服务的Server.
当Client 访问 Server 时,会先向KDC要一张访问Server的票,然后拿着那张票去Server那里享受服务.
这一点和坐高铁非常像,高铁爽不爽我们不管,我们只关注以下问题:

  1. 坐高铁是需要买车票的
  2. 出票单位不一定是你要进的那个高铁站
  3. 高铁票是和身份证绑定的
  4. 高铁票是限制日期和车次及座位号的
  5. 高铁票只能让你坐高铁,你在车站要吃KFC,还是要另外买的.
  6. 会有很多想自己做假票的
  7. 会有人想用假身份证和假钱买真票的

TGT(Ticket Granting Ticket)申领:

  1. Client向KDC发送TGT申请请求,会包含自己的用户名等Client Info.
  2. KDC会先生成一个Session Key(SK-KC),从数据库里找到Client的Master key(CMK),用CMK加密SK-KC,生成第一个包;再拿出自己的Master Key(KMK),用KMK加密SK-KC+ClientInfo,生成第二个包(TGT).把这两个包发还给Client.
    注意:TGT的内容Client无法读取内容的, SK-KC是有时效的.
  3. Client 拿到加密包把TGT存好,再用自己的Master Key(CMK)解密到SK-KC存好.

ST(Session Ticket)申领:

  1. Client 创建Authenticator及要访问的Server名称用SKC加密后连同TGT发给KDC
  2. KDC先用自己的Master Key(KMK)解密TGT,得到SKC+ClientInfo,再用SK-KC去解密另一个包,得到ClientInfo2和Server Name.
  3. 如果ClientInfo匹配,生成一个用于Server和Client的Session Key(SK-CS),然后用CMK加密SK-CS生成一个包,SMK(Server Master Key)加密SK-CS和ClientInfo生成另一个包ST(Session Ticket),把两个包都发给Client.
  4. Client 收到后用自己的Master Key(CMK)解密得到SK-CS.

Client 访问 Server:

  1. Client 创建Authenticator(ClientInfo3 + Timestamp)并用SK-CS对其加密,再把前面得到ST(Session Ticket)一起发给Server
  2. Server 用自己的Master Key(SMK)解密ST,得到SK-CS+ClientInfo3,再用SK-CS解密Authenticator得到ClientInfo+Timestamp.
  3. 如果ClientInfo匹配且Timestamp和本地时间偏差在可接受范围内,认证方通过.

整个流程可以看做:领身份证(TGT)–>凭身份证买票(ST)–> 检票口验票 --> 上车

第二部分:为Linux下的Apache 向Windows AD中注册服务

还记得前面的内容中KDC怎么生成Session Ticket的吗?不在KDC里注册服务,KDC怎么知道你的master key,还怎么为你卖票?

在AD里建立新用户

使用Ktpass命令生成Keytab

ktpass:Configures the server principal name for the host or service in Active Directory Domain Services (AD DS) and generates a .keytab file that contains the shared secret key of the service. The .keytab file is based on the Massachusetts Institute of Technology (MIT) implementation of the Kerberos authentication protocol. The Ktpass command-line tool allows non-Windows services that support Kerberos authentication to use the interoperability features provided by the Kerberos Key Distribution Center (KDC) service in Windows Server 2008 R2.
翻译过来就是用于在AD服务中为服务或主机配置服务主体名称,并生成包含此服务的共享密钥的keytab文件.
此处的shared secret key就是我们前面提到的Server Master Key.

ktpass /princ HTTP/server.domain.com@DOMAIN.COM /mapuser Sample1 /pass MyPas$w0rd /out server_HTTP.keytab 

不要试图用同一个账号为多台Server生成keytab.
似乎可以为账号上增加SPN以支持vhost?找个时间验证下.

将keytab 文件复制到Linux主机,并在apache 配置文件中指定认证方法

    AuthType Kerberos
    AuthName "Kerberos Login"
    KrbMethodNegotiate On
    KrbMethodK5Passwd On
    KrbAuthRealms DOMAIN.COM
    Krb5KeyTab /etc/httpd/server_HTTP.keytab
    KrbServiceName HTTP/server.domain.com@DOMAIN.COM
    require valid-user

配置Linux 主机的Kerberos 服务

[libdefaults]
 default_realm = DOMAIN.COM
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 YOUNGOPTICS.COM = {
  kdc = 10.16.0.5:88
  kdc = 10.16.0.6:88
admin_server = 10.16.0.5:749
 default_realm = DOMAIN.COM
 }

[domain_realm]
server.domain.com = DOMAIN.COM
domain.com = DOMAIN.COM
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值