在 Active Directory/Exchange 上儲存 PGP 密鑰?
我希望為 Outlook 實現一個完全不需要配置的透明外掛。我在考慮也許使用 Active Directory/Exchange 來儲存每個使用者的公鑰,並能夠像 Outlook 檢索使用者資訊一樣檢索它。
我想避免依賴外部密鑰伺服器或必須添加更多基礎設施才能提供密鑰。
是否可以以這種方式儲存 PGP 密鑰?為了從 Outlook 外掛中檢索它們,儲存它們的最簡單方法是什麼?
是的,有可能。但我能想到的使用 Active Directory 的唯一好方法是修改 AD 架構。修改 AD 架構是管理員不願做的事情之一,因為一是它基本上是不可逆的(“不可逆”是指沒有權威恢復),二是對生產 Active Directory 進行不可逆的更改會嚇到許多管理員。如果您正在製作應用程序或外掛,您將不得不考慮,如果您的軟體需要 AD 架構修改,那麼它將不會被盡可能多的組織使用。
但是修改 AD 架構本身並不是一件壞事,只要我們有充分的理由這樣做。例如,安裝 Microsoft Exchange 會擴展 AD 架構。很多。
我們知道 Active Directory 有足夠的能力並且非常適合儲存此類數據(使用者的公鑰),因為如果您使用 PKI,它已經為使用者儲存了 X509 公鑰。但是我絕對不會嘗試徵用其中一個現有屬性,例如
X509-Cert
orUser-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 密鑰之類的東西很糟糕,但我懶得回去為你重複所有內容。:)