【问题标题】:Active Directory public key use [closed]Active Directory 公钥使用 [关闭]
【发布时间】:2012-10-01 09:44:13
【问题描述】:

我有一个客户需要验证用户是否使用 LDAP 对照他的活动目录登录到我的 Web 应用程序。在尝试使用 DirectoryEntry 和 DirectorySearcher .NET 类进行连接时,我可以连接到他的 AD 服务器,但不能访问它。

客户的 AD 服务器有一个 SSL 证书,他给了我一个公钥文件,但我不知道如何在我的 C# 代码中使用这个公钥文件。

当我通过代码发出连接命令时,我通过 Wireshark 看到我的应用程序正在发送连接请求。然后我看到服务器以“Server Hello,Certificate,Certificate Request,Server Hello Done”响应。然后我的应用程序在那之后就再也没有响应了。

在使用由其他人编写但我没有代码的另一个应用程序时,我看到来自服务器的相同请求,然后看到应用程序响应“证书,客户端密钥交换”,然后应用程序连接并运行。

话虽如此,我的问题是,如何让我的 C# 应用程序加载并发送我从客户端获得的密钥文件?

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 感谢约翰纠正了这个问题。下次我就知道了。
  • Amitd,我尝试了建议文章中的方法,但当服务器请求我的证书时,我仍然被阻止。我收到了一个 .KEY 文件,其中包含有人告诉我的公钥。该文件以 BEGIN RSA PRIVATE KEY 开头,并以 END RSA PRIVATE KEY 标签结束,但我不能用它做任何事情。我尝试导入它,但 Windows 7 无法识别该文件。
  • 不知道为什么我的问题被认为是题外话。我认为众所周知的枪被跳过了。无论如何,我希望我能将 Amitd 的回答归功于他的回答,因为它是正确的。但是,我必须添加一行以使我的代码能够通过 SSL 证书与服务器通信。我会发布完整的答案,但主题已关闭。

标签: c# active-directory ldap


【解决方案1】:

密钥文件需要安装到用户机器/用户帐户中。

看看下面的内容,了解如何安装数字证书...

请参阅第 3 步...

http://msdn.microsoft.com/en-us/library/ff649247.aspx

第 3 步。请求并安装客户端证书

此过程安装客户端证书。您可以使用来自任何证书颁发机构的证书,也可以使用 Microsoft 证书服务生成您自己的证书,如以下部分所述。

此过程假定 Microsoft 证书服务已针对待处理的请求进行配置,这需要管理员明确颁发证书。它还可以配置为自动颁发证书以响应证书请求。

检查证书请求状态设置

在 Microsoft 证书服务计算机上,从管理工具程序组中选择证书颁发机构。 展开证书颁发机构(本地),右键单击证书颁发机构并单击属性。 单击策略模块选项卡,然后单击配置。 检查默认操作。 以下过程假定将证书请求状态设置为待处理。管理员必须明确颁发证书被选中。

请求客户端证书

启动 Internet Explorer 并导航到 http://hostname/certsrv,其中 hostname 是安装 Microsoft 证书服务的计算机的名称。 单击请求证书,然后单击下一步。 在选择请求类型页面上,单击用户证书,然后单击下一步。 单击提交以完成请求。 关闭 Internet Explorer。 颁发客户端证书

从“管理工具”程序组中,启动证书颁发机构工具。 展开您的证书颁发机构,然后选择 Pending Requests 文件夹。 选择您刚刚提交的证书请求,指向“操作”菜单上的“所有任务”,然后单击“问题”。 确认证书显示在已颁发证书文件夹中,然后双击它进行查看。 在详细信息选项卡上,单击复制到文件以将证书保存为 Base-64 编码的 X.509 证书。 关闭证书的属性窗口。 关闭证书颁发机构工具。 安装客户端证书

要查看证书,请启动 Windows 资源管理器,导航到在上一个过程中保存的 .cer 文件,然后双击它。 单击安装证书,然后单击证书导入向导第一页上的下一步。 选择根据证书类型自动选择证书存储,然后单击下一步。 单击完成以完成向导。关闭确认消息框,然后单击“确定”关闭证书。 步骤 4. 验证客户端证书操作

此过程验证您是否可以使用客户端证书访问 SecureApp 应用程序。

验证客户端证书操作

启动 Internet Explorer 并导航到 http s://localhost/secureapp/webform1.aspx。 确认网页显示成功。

【讨论】:

  • 感谢 Matthew 的回复和建议。不幸的是,上面第 3 步(以及文章中)中的任何选项都不适合我。我注意到这篇文章已经退休了,所以我想知道它是否适用于比我正在运行的版本更早的 Windows 版本,目前是 Windows 7。我对关键的东西真的很陌生,客户端也是如此,所以我一直在磕磕绊绊这里。归根结底,我有一个 .KEY 文件,它以“BEGIN RSA PRIVATE KEY”开头并以“END RSA PRIVATE KEY”结尾,中间有一堆加密字符。我需要将该文件作为证书加载,但 Windows 7 不会这样做
  • 我开始相信客户向我发送了错误的文件。他应该发给我一个我可以导入的 .PFX 文件吗?
  • 嗨,这实际上帮助了我...看看这些信息,stackoverflow.com/questions/9678202/… 它表明您的客户端正在使用 openSSL。以下页面将帮助您了解有关 OpenSSL 的更多信息,不幸的是我没有很多经验.. madboa.com/geek/openssl 但我认为您需要执行我在其他答案中发布的内容。我留下了原始版本,因为它对不打开 SSL 的标准证书文件有效,而另一个答案应该允许人们使用 openSSL。告诉我进展如何。
【解决方案2】:

如何导出或导入 PKCS#12 证书?

PKCS#12 文件可以由许多应用程序导入和导出,包括 Microsoft IIS。它们通常与文件扩展名 .pfx 相关联。

要创建 PKCS#12 证书,您需要一个私钥和一个证书。在转换过程中,您将有机会在证书上输入“导出密码”(可以为空,如果您选择)。

创建一个包含密钥和自签名证书的文件

openssl 请求\ -x509 -nodes -days 365 \ -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

将 mycert.pem 导出为 PKCS#12 文件 mycert.pfx

openssl pkcs12 -export \ -out mycert.pfx -in mycert.pem \ -name“我的证书” 如果有人向您发送 PKCS#12 以及使用它所需的任何密码,您可以将其导出为标准 PEM 格式。

导出证书和无密码密钥

openssl pkcs12 -in mycert.pfx -out mycert.pem -nodes

与上述相同,但系统会提示您输入密码

私钥

openssl pkcs12 -in mycert.pfx -out mycert.pem

【讨论】:

  • 感谢您提供的信息。实际上,事实证明我不需要客户端密钥文件或客户端证书。但我非常感谢您的研究,并且知道这将有助于我和准备这篇文章的人的未来发展。
  • 对于以后阅读本文的其他人来说,可能值得详细介绍一下您的发现。还是只是您根本不需要使用证书?
  • 确实如此。我实际上根本不需要使用证书。证书已安装在服务器上,但我不需要客户端上的匹配证书。
猜你喜欢
  • 2020-02-08
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多