2009-02-19 30 views
49

Tôi có chứng chỉ được tạo qua MakeCert. Tôi muốn sử dụng chứng chỉ này cho bảo mật thư WCF bằng PeerTrust. Làm cách nào tôi có thể cài đặt chứng chỉ theo chương trình vào kho lưu trữ chứng chỉ máy cục bộ "đáng tin cậy" bằng C# hoặc .NET?Làm cách nào để cài đặt chứng chỉ vào kho lưu trữ máy cục bộ bằng C#?

Tôi có tệp CER, nhưng cũng có thể tạo PFX.

+0

Btw - tôi biết chi tiết về Makecert và sự tin tưởng. Vui lòng chỉ tìm kiếm các đề xuất về cài đặt chứng chỉ bằng cách sử dụng C# hoặc installshield có lập trình. cảm ơn! –

+0

bất kỳ ý tưởng làm thế nào để làm điều này trong chương trình c ?? API nào trong cửa sổ ?? – 2vision2

Trả lời

53

Tôi tin rằng điều này là đúng:

using (X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine)) 
{ 
    store.Open(OpenFlags.ReadWrite); 
    store.Add(cert); //where cert is an X509Certificate object 
} 
+1

Giấy chứng nhận cài đặt này thành công, nhưng khi tôi mở tùy chọn Quản lý khóa riêng tư cho khóa cá nhân trong cửa hàng cá nhân, nó sẽ cung cấp lỗi "không tìm thấy khóa cho chứng chỉ". – mit

+0

Tôi đoán câu trả lời này, giờ đã bị vô hiệu vì X509Store không dùng một lần. –

+0

@mit bạn có tìm thấy giải pháp cho "không có khóa riêng tư được tìm thấy cho chứng chỉ này" không? – samir105

35

làm việc tốt cho tôi Sau đây:

private static void InstallCertificate(string cerFileName) 
{ 
    X509Certificate2 certificate = new X509Certificate2(cerFileName); 
    X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine); 

    store.Open(OpenFlags.ReadWrite); 
    store.Add(certificate); 
    store.Close(); 
} 
6

Thay vì cài đặt chứng chỉ để LocalMachine đòi hỏi đặc quyền nâng cao, bạn có thể thêm nó vào "CurrentUser "(làm việc cho tôi).

X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadWrite); 
store.Add(cert); //where cert is an X509Certificate object 
store.Close(); 
+0

Cảm ơn vì điều này. Điều này là thích hợp hơn cho tôi vì điều này sẽ được chạy trong một dịch vụ tự lưu trữ được thực hiện (nhiều trường hợp) trong thời gian chạy. Không có cách nào để cung cấp lời nhắc UAC. Cảm ơn một lần nữa! – CodeWarrior

Các vấn đề liên quan