【问题标题】:Query LDAP by userCertificate attribute, with certificate通过 userCertificate 属性查询 LDAP,带有证书
【发布时间】:2014-08-26 22:15:00
【问题描述】:

我以byte[] 的身份获得证书,例如:

byte[] certRaw;
X509certificate2 x509Cert = new x509Certificate2(Request.ClientCertificate.Certificate);
certRaw = x509Cert.GetRawCertData();

然后我尝试通过该值在 LDAP 中查找用户。

DirectorySearcher finduser = new DirectorySearcher(ldapconnection);
findUser.Filter = "(&(objectClass=user)(userCertificate=" + certRaw + "))";

这无法匹配 LDAP 中的 userCertificate。 如果我从证书中获取并使用它而不是 userCertificate 属性,我可以通过 CN 查找用户,但这不是我得到的要求。任何帮助表示赞赏。

【问题讨论】:

    标签: c# ldap adlds


    【解决方案1】:

    我被问到同样的事情!

    好吧,有人问我“当我只有证书时,如何通过针对他们发布的证书在 Active Directory 中找到用户,并且证书中不一定包含用户的主题名称,也可能不是与任何事物一致”。所以:足够接近。

    我把你的问题和另一个答案放在一起,得到了一些看起来可行的东西。

    通常的免责声明适用不要这样做...这可能会削弱您的 DC,或轻度致癌或其他原因。不知道它如何或是否适用于填充到 userCertificate 中的多个证书,因此在这种情况下可能需要修改查询。

    要运行此程序,您需要一个正在搜索的证书的 .CER 文件。然后就是

    FindUserWithCert mycert.CER 
    

    你走了。

    using System;
    using System.Security.Cryptography;
    using System.Security.Cryptography.X509Certificates;
    using System.DirectoryServices;
    
    /// This is sample code only so please enjoy it with all care
    /// and no responsibility :) 
    /// 
    namespace FindUserWithCert
    {
        class Program
    
        {
            static void Main(string[] args)
            {
                byte[] certRaw; 
                X509Certificate2 x509Cert = new X509Certificate2(args[0]); 
                certRaw = x509Cert.GetRawCertData();
    
                string certBytes = "";
    
                foreach (byte b in certRaw){
                    certBytes += String.Format("\\{0:X}", b);
                    //Console.Write (String.Format("\\{0:X}",b));
                }
    
                DirectorySearcher findUser = new DirectorySearcher("(&(objectClass=user)(userCertificate=" + certBytes + "))");
    
                foreach (System.DirectoryServices.SearchResult thing in findUser.FindAll())
                {
                    Console.WriteLine(thing.Path.ToString());
                }
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多