2010-05-06 115 views
3

我有一個通常使用本地系統帳戶運行的Windows服務(儘管在某些安裝中它可能作爲特定的用戶帳戶)。哪裏存儲Windows服務的X509證書?

該服務正在使用WCF,並使用X509證書進行通信保護。

我的問題是,哪裏是存儲證書(和私鑰)的最佳位置?

如果使用證書存儲是最好的方法,我應該使用哪一個來確保只有管理員和服務可以訪問私鑰?

或者,一個簡單的選項是將兩者都作爲PFX文件存儲在磁盤上,並使用ACL來確保只有管理員和服務才能訪問它。這種方法與使用證書存儲有什麼區別?

編輯 爲了澄清,我正在使用C#與所有的.NET Framework 3.5的

回答

2

首先,我建議你在保存非導出的私鑰證書存儲來保存證書。現在有些爭論。

有不同的方法可以在機器上保存私人祕密或其他私人信息。最舊的方法是LsaStorePrivateDataLsaRetrievePrivateData API(請參閱http://msdn.microsoft.com/en-us/library/ms721818%28VS.85%29.aspx)。它對祕密數量有限制,但所有祕密可以分爲本地,全球和機器。

接下來的方法是在我們的例子中使用DPAPI(見http://msdn.microsoft.com/en-us/library/ms995355.aspx):CryptProtectDataCryptUnprotectData

我爲這兩種方式添加引用,因爲您想比較不同的可能方式,以確保您的方式是最適合您的任務。

我認爲你應該問的最重要的問題是:哪個是保護我私鑰的最好方法?我想你應該選擇這樣的方式,其中保護你的密鑰被複制。所以我建議你使用證書存儲。在證書商店中,您可以持有標記爲的不可輸出密鑰。這是我認爲的主要優勢。您可以用不同的方式部署帶有相應私鑰的證書。請確保保存在機器上的私鑰未標記爲可輸出

在磁盤上使用PFX文件不會帶來這個好處。此外,您的PFX未加密,或者您收到問題,您應該將密碼保存到PFX文件。因此您必須使用DPAPI(CryptProtectDataCryptUnprotectData)或LSA API(LsaStorePrivateDataLsaRetrievePrivateData),並且可以導出密碼。

+2

「不可導出」標誌並不真正增加安全性 - 使用像Jailbreak(www.isecpartners.com)這樣的工具導出此類密鑰並不重要。 – Cocowalla 2010-05-06 21:25:19

+0

@Cocowalla謝謝你的有趣信息!這對我來說是新的,我將搜索有關此工具的更多信息,但我不相信此工具可以從智能卡或其他硬件解決方案中導出私鑰。原因智能卡不適合服務器的解決方案,但其他基於硬件的證書存儲可以解決問題。而且,在Windows的下一個安全修復程序之後,越獄程序無法工作。爲了說明信任,我不知道至少從體系結構方面來看證書存儲更好的解決方案。 – Oleg 2010-05-06 21:44:44

+0

你說得對,Jailbreak不能從智能卡中輸出。如果證書商店是最好的解決方案,我應該使用哪個商店?本地機器商店?這是如何得到保證的(也就是說,_who_可以訪問私鑰)? – Cocowalla 2010-05-06 21:47:44