2012-01-14 22 views
5

跟進到previous question,我有一些代碼需要使用私鑰獲取X509證書。正如答案中所指出的,在生產中,這將使用X509Store進行。如何使用私鑰獲取證書的基礎64編碼值?

單元測試的最佳方式是什麼?我想用不同的證書進行開發和測試,所以我可以創建一個CertificateRepository接口來提供不同的實現。

對於測試/ dev實現,只需使用base64編碼的證書字符串並使用僞密碼和專用的測試/ dev證書以這種方式創建證書實例即可。但是到目前爲止,我一直無法弄清楚如何用私鑰作爲base64字符串來編碼證書。每次我嘗試從MMC導出證書爲base-64時,它只對公鑰進行編碼。

+0

你如何創建證書? – 2012-01-15 05:41:06

+0

用這些開關使用makecert.exe創建:-r -pe – danludwig 2012-01-15 15:44:13

回答

9

我無法弄清楚如何用mmc來做到這一點。不過我也沒搞清楚,如何做到這一點的代碼:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly); 
var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, 
    "BLABLABLA", false)[0]; // doesn't matter how you get the cert 
var exported = certificate.Export(X509ContentType.Pfx, "the password"); 
var base64 = Convert.ToBase64String(exported); 
store.Close(); 

只要你是從x 509店獲得的證書有私鑰,它會在導出的字節arrray結束了,你可以然後轉換爲base64字符串。

0

確保您在將證書添加到商店時將私鑰標記爲可導出。

如果使用makecert創建證書,加-pe選項,以使私鑰可以導出。

+0

我這樣做了,但它不會讓我導出除pkcs12(.pfx) – danludwig 2012-01-15 15:43:30