我被问到同样的事情!
好吧,有人问我“当我只有证书时,如何通过针对他们发布的证书在 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());
}
}
}
}