none
智能卡登陆KDC证书问题 RRS feed

  • 问题

  • Hi,我们正在测试智能卡登陆

    测试环境:Windows 2008 R2 域控制器,Windows 2008 R2 CA和一台Windows 2008 R2服务器(都在域中)

    使用智能卡登陆时候会报错“系统不能让您登陆,您不能使用智能卡登陆,因为您的用户账户不支持智能卡登陆...”,在域控制器上有错误信息“EVENT 19:该事件表明试图使用智能卡登录,但是 KDC 无法使用 PKINIT 协议,原因是缺少合适的证书。”,如果使用service stop kdc && service start kdc的话有警告信息:“EVENT 29 密钥发行中心(KDC)找不到相应的证书用于智能卡登录,或者无法验证 KDC 证书。如果不解决该问题,智能卡登录可能不会正常工作。若要更正该问题,请使用 certutil.exe 验证现有的 KDC 证书或注册新的 KDC 证书。”

    我们在刚刚安装完测试环境的时候是可以使用的,之前安装过几个CA,后来手动删除了(http://support.microsoft.com/kb/555151),现在我们想找到问题的原因,以便生产部署的时候能够更快完成。

    我们重新申请了几次域控制器证书(http://technet.microsoft.com/en-us/library/cc734096.aspxhttp://technet.microsoft.com/en-us/library/cc733944(v=ws.10).aspx), certutil -dcinfo verify的结果正常,但是一直有EVENT 19和EVENT 29错误。

    请问怎么解决该问题?

    使用certutil -dcinfo verify的输出结果是:

    0: CTXDC

    *** 正在测试 DC[0]: CTXDC
    **  DC CTXDC 的企业根证书
    证书 0:
    序列号: 781902753c5627b64bd4e45c38b648df
    颁发者: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
     NotBefore: 2013/4/11 11:57
     NotAfter: 2018/4/11 12:07
    使用者: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
    证书模板名称 (证书类型): CA
    CA 版本: V0.0
    签名与公钥匹配
    根证书: 使用者与颁发者匹配
    模板: CA, 根证书颁发机构
    证书哈希(sha1): 24 43 b0 79 33 8d f4 74 2d 52 df 75 3a 50 73 85 62 25 fb 86

    **  DC CTXDC 的 KDC 证书
    证书 0:
    序列号: 611648d2000000000030
    颁发者: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
     NotBefore: 2013/4/21 12:05
     NotAfter: 2014/4/21 12:05
    使用者: CN=CTXDC.demo2.internal.jiean-technologies.lan
    证书模板名称 (证书类型): DomainController
    非根证书
    模板: DomainController, 域控制器
    证书哈希(sha1): e5 e5 5f 80 b0 cd 7f b5 3d 86 51 3e f3 70 d0 8e 39 48 45 cd

    dwFlags = CA_VERIFY_FLAGS_NT_AUTH (0x10)
    dwFlags = CA_VERIFY_FLAGS_CONSOLE_TRACE (0x20000000)
    dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000)
    Application[0] = 1.3.6.1.5.5.7.3.1 服务器身份验证
    Application[1] = 1.3.6.1.5.5.7.3.2 客户端身份验证
    ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000)
    HCCE_LOCAL_MACHINE
    CERT_CHAIN_POLICY_NT_AUTH
    -------- CERT_CHAIN_CONTEXT --------
    ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
    ChainContext.dwRevocationFreshnessTime: 10 Hours, 36 Minutes, 16 Seconds

    SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
    SimpleChain.dwRevocationFreshnessTime: 10 Hours, 36 Minutes, 16 Seconds

    CertContext[0][0]: dwInfoStatus=102 dwErrorStatus=0
      Issuer: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
      NotBefore: 2013/4/21 12:05
      NotAfter: 2014/4/21 12:05
      Subject: CN=CTXDC.demo2.internal.jiean-technologies.lan
      Serial: 611648d2000000000030
      SubjectAltName: Other Name:DS 对象 GUID=04 10 f1 68 15 d4 e6 4a 8c 40 80 c6 15 16 1d 26 49 4d, DNS Name=CTXDC.demo2.internal.jiean-technologies.lan
      Template: DomainController
      e5 e5 5f 80 b0 cd 7f b5 3d 86 51 3e f3 70 d0 8e 39 48 45 cd
      Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
      Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
        CRL 54:
        Issuer: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
        52 95 06 73 26 3a 6a 22 a3 6f d7 6e b2 f3 4c 3d 02 9b 7e 54
        Delta CRL 55:
        Issuer: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
        8c c0 97 5e a3 13 9d a1 5c a2 c1 86 e8 65 ff b0 8b ea f4 a3
      Application[0] = 1.3.6.1.5.5.7.3.2 客户端身份验证
      Application[1] = 1.3.6.1.5.5.7.3.1 服务器身份验证

    CertContext[0][1]: dwInfoStatus=10c dwErrorStatus=0
      Issuer: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
      NotBefore: 2013/4/11 11:57
      NotAfter: 2018/4/11 12:07
      Subject: CN=demo2CA, DC=demo2, DC=internal, DC=jiean-technologies, DC=lan
      Serial: 781902753c5627b64bd4e45c38b648df
      Template: CA
      24 43 b0 79 33 8d f4 74 2d 52 df 75 3a 50 73 85 62 25 fb 86
      Element.dwInfoStatus = CERT_TRUST_HAS_NAME_MATCH_ISSUER (0x4)
      Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8)
      Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)

    Exclude leaf cert:
      33 0e 29 2d 44 b0 f9 5d a8 7d 03 26 52 e0 cf 00 4c bf 66 2d
    Full chain:
      04 60 4a 63 ea 44 36 5a 8a 3e 43 b5 23 2a ee 8e a6 05 16 3b
    ------------------------------------
    已验证的颁发策略: 无
    已验证的应用程序策略:
        1.3.6.1.5.5.7.3.2 客户端身份验证
        1.3.6.1.5.5.7.3.1 服务器身份验证
    1 KDC 证书,属于 CTXDC

    CertUtil: -DCInfo 命令成功完成。

    2013年4月21日 5:30

答案

  • ok,现在暂时看不到EVENT29错误了,不知道下面哪个操作有用..

    1. 证书颁发机构的CDP中取消了”包括在已颁发的CRL的IDP扩展中“;

    2. 证书颁发机构的AIA中取消了”包括在联机证书状态协议OCSP扩展中“;

    3. 使用certutil -setreg chain\ChainCacheResyncFiletime @now

    明天测试一下智能卡是否能用..

    • 已标记为答案 danslarue 2013年4月24日 16:35
    2013年4月22日 16:08

全部回复

  • 我先来简述一下你的问题,看是否正确?

    你有三个问题点:

    1. 使用智能卡登陆时候会报错“系统不能让您登陆,您不能使用智能卡登陆,因为您的用户账户不支持智能卡登陆...”
    2. 在域控制器上有错误信息EVENT 19
    3. 在域控制器上有错误信息EVENT 29

    然后,你最关心并希望解决的问题是第1个;

    并且,你认为问题2和3可能是引发问题1的根本原因,所以你趋向于先解决问题2和3,然后再看问题1。

    是这样吗?

    2013年4月22日 4:15
  • 对的,我认为根本问题是kdc证书不被认为有效的服务器证书,如果没有域控证书智能卡应该是肯定不能登陆的,实际上EVENT19就是我在尝试用智能卡登录时候报的错误。但是域控制器证书是经过certutil -dcinfo verify测试的,搜了下资料,似乎这个验证不是那么可靠..

    我删除了证书颁发机构中CDP中的LDAP,只保留了HTTP的CDP(”包括在CRL中;包括在颁发的CDP扩展中;包括在已发布的IDP扩展中.“)和C:\...的“发布到此位置;发布增量到此位置“。CRL和增量CRL似乎都没有问题,使用浏览器都可以下载查看,与服务器证书里面的描述也一致。IIS7里面增量CRL包括”+“的错误似乎也被修正了(很多2009年的帖子里面提到这个)。我之前碰到Certification Revocation Offline的警告,经过重新配置CA扩展属性中的CDP并重新发布CRL也解决掉了..至少没有Offline警告了

    我重新做了个测试环境,又在生产环境里面部署了CA,使用同样的步骤,都没有EVENT 29(我想这是导致EVENT19的原因),但是我还是想知道为什么会出现这个问题,怎么修复。因为一旦生产环境出现这个问题就麻烦大了,重做域环境或者重做CA都是不可以接受的...

    有点进展,根据帖子http://social.technet.microsoft.com/Forums/en-US/winserverDS/thread/19759374-c928-450a-96a0-39a7a6003e74/里面的一个说明,我设置了

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\kdc]

    "UseCachedCRLOnlyAndIgnoreRevocationUnknownErrors"=dword:00000001

    使用net stop kdc && net start kdc之后没有EVENT 29警告了,估计问题是CRL的问题,我再检查一下。

    2013年4月22日 13:53
  • ok,现在暂时看不到EVENT29错误了,不知道下面哪个操作有用..

    1. 证书颁发机构的CDP中取消了”包括在已颁发的CRL的IDP扩展中“;

    2. 证书颁发机构的AIA中取消了”包括在联机证书状态协议OCSP扩展中“;

    3. 使用certutil -setreg chain\ChainCacheResyncFiletime @now

    明天测试一下智能卡是否能用..

    • 已标记为答案 danslarue 2013年4月24日 16:35
    2013年4月22日 16:08
  • 是的,看起来CRL在SmartCard登录过程中扮演着非常关键的角色

    这篇微软blog就描述CRL的重要性:

    Requiring Smart Cards for logon - what happens when CRL publication fails

    http://blogs.technet.com/b/instan/archive/2008/12/08/requiring-smart-cards-for-logon-avoiding-the-outage-caused-by-expired-crl-s.aspx

    然后,你真的启用 “UseCachedCRLOnlyAndIgnoreRevocationUnknownErrors” 应该会造成安全隐患,如果将来会封杀一些证书的话。。。

    2013年4月23日 1:00
  • 恩,目前UseCachedCRLOnlyAndIgnoreRevocationUnknownErrors=0;工作正常,智能卡能够登录,估计是上面提到的3点中的一个,或者什么修正了错误。
    2013年4月24日 16:34