我正在寻找一个完全不需要配置的 Outlook 透明插件。我考虑过使用 Active Directory/Exchange 来存储每个用户的公钥,并能够以与 Outlook 检索用户信息相同的方式检索它。
我想避免依赖外部密钥服务器或必须添加更多基础设施来提供密钥。
是否可以通过这种方式存储 PGP 密钥?为了从 Outlook 插件中检索它们,最简单的存储方法是什么?
答案1
是的,这是可能的。但是我能想到的唯一使用 Active Directory 的好方法是修改 AD 架构。修改 AD 架构是管理员不愿做的事情之一,因为第一,它基本上是不可逆的(我所说的“不可逆”是指没有权威恢复),第二,对生产 Active Directory 进行不可逆的更改让许多管理员感到害怕。如果您正在制作应用程序或插件,您必须考虑到,如果它需要修改 AD 架构,那么您的软件将不会被那么多组织使用。
但修改 AD 架构本身并不是坏事,只要我们有充分的理由这样做。例如,安装 Microsoft Exchange 可以扩展 AD 架构。扩展很多。
我们知道 Active Directory 完全有能力并且非常适合存储这种数据(用户的公钥),因为如果您使用 PKI,它已经为用户存储了 X509 公钥。但我绝对不会试图征用其中一个现有属性,例如X509-Cert
或User-Cert
将thumbnailPhoto
您自己的自定义数据塞入其中。如果您的组织想要使用 PKI 或其他产品,这些产品假定这些 AD 属性包含它们旨在存储的实际数据类型,那么这会导致问题。
如果您的数据是一个非常小的字符串,那么您可以将数据偷偷放入许多现有的用户属性中…… description,
employeeID
,telexNumber
等等。但是,适合存储一千字节或更多数据的属性并不多。而且这些通常已经被占用了。
不过,您可以在这里仔细查看,看看是否可以找到每个用户帐户中已经存在的属性,该属性可能能够保存 PGP 公钥并且不会干扰其他应用程序:
也许最好的办法是你自己创建。
首先,在架构主机上打开注册表编辑器并编辑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
Schema Update Allowed (DWORD) 0x00000001
您不必重新启动甚至重新启动 AD DS。
接下来,注册 AD 架构管理单元:
regsvr32 schmmgmt.dll
打开 MMC 并添加 Active Directory 架构管理单元。
您必须为新属性分配一个基于域 OID 的 X500 对象 OID。您可以使用此脚本为新架构属性生成新的 X500 OID:
请注意,最好为所有相关属性添加相同的前缀,例如“MyApp”。例如,所有 Active Directory 特定属性都具有“msDS”之类的前缀,而 DFS 复制特定属性将具有“msDFSR”前缀,等等。您添加的所有与此软件相关的未来属性都将使用相同的前缀和相同的 OID 前缀。
您可能不想索引此属性,因为搜索具有特定 PGP 公钥的用户对我来说听起来不像是常见的搜索。(您只在想使用它们作为搜索词时才索引它们。)或者,如果您的林中有多个域,您可能希望复制到全局目录。请注意,如果您有一个大型域,这可能会导致您的索引和 GC 复制流量大幅增加。
接下来要将新属性分配给 Person 类:
现在,如果您检查用户的“属性编辑器”选项卡,您将看到他们有一个新的属性供您编辑和查询。
以下是一些后续作业:
编辑属性的默认安全性,以便只有帐户所有者(也可能是域管理员)可以更新自己帐户的属性,而其他人则无法更新。这样,您可以让 Outlook 插件自动为用户上传 PGP 公钥,前提是他们的 Outlook 客户端在其安全上下文中运行。
为你的属性使用不同的语法。我在示例中使用的 Unicode 字符串语法对于 PGP 密钥之类的东西来说很糟糕,但我太懒了,不想为你回头重复一切。:)