在Active Directory / Exchange上存储PGP密钥?

我期待实现一个透明的Outlook插件,根本不需要任何configuration。 我正在考虑使用Active Directory / Exchange来存储每个用户的公钥,并能够像Outlook检索用户信息一样检索它。

我想避免依靠外部密钥服务器或不得不添加更多的基础设施来提供密钥。

这样可以存储PGP密钥吗? 什么是最简单的方式来存储他们从Outlook插件检索他们?

对的,这是可能的。 但是我认为使用Active Directory执行此操作的唯一好方法是修改AD架构。 修改AD模式是pipe理员所不愿意做的事情之一,因为基本上这是不可逆转的(“不可逆转的”,我的意思是没有权威性的还原),而对生产活动目录进行不可逆转的更改会吓倒许多pipe理员。 如果您正在制作应用程序或插件,则必须考虑到如果需要修改AD架构,您的软件将不会被许多组织使用。

但修改AD模式本身并不是坏事,只要我们有一个很好的理由去做。 例如,安装Microsoft Exchange扩展了AD架构。 很多。

我们知道Active Directory有足够的能力和适合存储这种数据(用户的公钥),因为如果您使用PKI,它已经存储了用户的X509公钥。 但是,我绝对不会试图通过X509-CertUser-CertthumbnailPhoto等现有属性来填充自定义数据。 如果您的组织曾经想要使用PKI或其他假定这些AD属性拥有其devise存储的实际数据types的产品,那么这会造成问题。

如果你的数据是一个非常小的string, description, employeeID telexNumbertelexNumber等等,那么你可以偷偷地将数据存入很多现有的用户属性。但是没有很多属性适合存储千字节或更多的数据。 而这些通常已经被提及。

不过,您可以在这里看看是否可以find每个用户帐户上已存在的属性,这些属性可能能够保存PGP公钥并且不会干扰其他应用程序:

可能是最好的,你创build自己的。

首先,在架构主机上打开registry编辑器并编辑:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters Schema Update Allowed (DWORD) 0x00000001 

您不必重新启动或甚至重新启动AD DS。

接下来,注册AD模式pipe理pipe理单元:

 regsvr32 schmmgmt.dll 

打开MMC并添加Active Directory架构pipe理单元。

警告

您必须将X500对象的OID分配给基于您的域的OID的新属性。 您可以使用此脚本为新的模式属性生成新的X500 OID:

新的属性

请注意,为所有相关属性添加相同的前缀(如“MyApp”)是个好主意。 例如,所有Active Directory特定属性都有一个类似“msDS”的前缀,并且“DFS复制”特定属性将具有“msDFSR”前缀等。所添加的与此软件相关的所有未来属性将使用相同的前缀,相同的OID前缀。

您可能不希望为此属性编制索引,因为search具有特定PGP公钥的用户听起来并不像我一般的search。 (如果要将它们用作search项,则只能编制索引。)或者,如果您的林中有多个域,则可能需要复制到全局编录。 请注意,如果您的域很大,这可能会导致您的索引和GC复制stream量大幅增加。

接下来,您要将新属​​性分配给Person类:

添加到个人

现在,如果你去检查你的用户的属性编辑器选项卡,你会看到他们有一个新的属性,您可以编辑和查询。

为你做一些后续作业:

  • 编辑属性上的默认安全性,以便只有帐户所有者(也可能是域pipe理员)可以更新自己帐户上的属性,而不是其他人。 这样,你可以让你的Outlook插件自动上传用户的PGP公钥,假设他们的Outlook客户端正在其安全上下文中运行。

  • 为您的属性使用不同的语法。 在我的例子中使用的Unicodestring语法很糟糕,但是我太懒惰了,只能为你重复一切。 🙂