2011-04-14 28 views
8

我正嘗試創建自己的WIF身份提供程序並在Azure上運行它,但在嘗試自動生成聯合元數據時遇到了困難。如何在Windows Azure上的代碼中獲得證書

這條線不會出現在Azure上運行:

CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, signingCertificateName); 

證書上傳到Azure的,我怎麼能弄個?

感謝

+0

看起來像下面所說明的那樣,代碼在內部和雲上都是相同的。我正在檢查證書的名稱,在Azure上它包含額外的信息,這就是爲什麼我找不到它。 – Max 2011-04-15 08:44:15

回答

7

試試這個博客帖子: http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx

這表明這樣的代碼:

X509Certificate2Collection selectedCerts = new X509Certificate2Collection(); 

X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly); 
foreach (X509Certificate2 cert in store.Certificates) 
{ 
    // do stuff with cert 
} 
+0

這段代碼也適用於非天藍色的機器...... – 2011-04-14 19:45:27

+0

這段代碼讓我看到Azure上的證書名稱與我期望的不同,並對我的問題進行了排序:) – Max 2011-04-15 08:45:21

9

至於其他的答案稍有不同,如果你只是想獲得一個證書,而不是遍歷所有他們你可以做這樣的事情:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 

store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

X509Certificate2Collection matchedCertificates = 
    store.Certificates.Find(X509FindType.FindBySubjectName, signingCertificateName, true); 

if (matchedCertificates.Count > 0) 
{ 
    myCertificate = matchedCertificates[0]; 
} 

(這也不是Azure特定的)

+0

非常好,即使我標記了其他repsonse作爲答案,因爲它突出了我的問題我重構了我的代碼看起來像這樣。謝謝! +1 – Max 2011-04-15 08:46:45

+0

什麼是當前答案,StoreLocation.LocalMachine或StoreLocation.CurrentUser?我瞭解,對於Web應用程序,不能訪問本地用戶證書,因此它必須是本地機器,我錯了嗎? – 2012-06-11 15:55:28

+1

我只在Azure上使用LocalMachine,因爲我在這種情況下發現用戶的概念有點怪異。 – knightpfhor 2012-06-11 21:15:08

相關問題