2010-11-16 37 views
10

Tôi có một số mã C# 4.0 cố gắng cài đặt chứng chỉ CA (.der được mã hóa) vào cửa hàng "Trusted Root Certification Authorities" cho người dùng hiện tại (My). Ứng dụng giao diện điều khiển nhỏ của tôi chạy âm thầm với các cửa hàng khác, nhưng đối với cửa hàng này, cửa sổ bật lên GUI xuất hiện "Bạn sắp cài đặt chứng chỉ từ cơ quan cấp chứng chỉ ... Windows không thể xác thực chứng chỉ thực sự là từ ..... Bạn có muốn cài đặt chứng chỉ này? "Cài đặt Chứng chỉ Bảo mật Cảnh báo Giải pháp?

Hộp thư này là một vấn đề vì ý tưởng là tự động triển khai ứng dụng bằng MSI và âm thầm có được đúng chứng chỉ ở đúng nơi. Có một hộp phương thức sẽ giết triển khai tự động.

Cách cài đặt này có thể được thực hiện mà không có hộp thông báo phá triển khai?

+1

Lý do của Windows bật lên câu hỏi đó là cách thêm chứng chỉ cho các cửa hàng gốc có ý nghĩa an ninh, và vì vậy nên không được làm nhẹ nhàng. Tôi không chắc liệu có cách nào để tránh cửa sổ bật lên, nhưng tôi hy vọng là không! Cài đặt một ứng dụng nên ** không được phép thỏa hiệp bảo mật của PC - đặc biệt là không âm thầm. – dajames

+2

@dajames Giống như Oleg đã viết trong câu trả lời của mình: quản trị viên được phép cài đặt chứng chỉ trong máy chủ lưu trữ cục bộ gốc đáng tin cậy mà không có cửa sổ bật lên. Và khi bạn cài đặt một ứng dụng, bạn thường cung cấp quyền quản trị cài đặt, vì vậy tôi nghĩ kịch bản của bạn thực sự có thể. Một lý do khác bạn nên cẩn thận với trình cài đặt/ứng dụng nào bạn cung cấp cho quyền quản trị quý giá của mình. – Stefan

Trả lời

25

Có thể âm thanh không hợp lý, nhưng không có cảnh báo, bạn nên thêm chứng chỉ vào kho lưu trữ chứng chỉ gốc của người dùng hiện tại, nhưng thay vào đó là Root của máy cục bộ. Bạn dễ dàng có thể xác minh rằng

certmgr.exe -add -c t.cer -s -r currentUser root 

sản xuất cảnh báo bảo mật, nhưng

certmgr.exe -add -c t.cer -s -r localMachine root 

không.

Vì vậy, nếu bạn muốn nhập một chứng chỉ trong .NET thì mã tương ứng có thể là về sau

using System; 
using System.Security.Cryptography.X509Certificates; 

namespace AddCertToRootStore { 
    class Program { 
     static void Main (string[] args) { 
      X509Store store = new X509Store (StoreName.Root, 
              StoreLocation.LocalMachine); 
      store.Open (OpenFlags.ReadWrite); 
      X509Certificate2Collection collection = new X509Certificate2Collection(); 
      X509Certificate2 cert = new X509Certificate2 (@"C:\Oleg\t.cer"); 
      byte[] encodedCert = cert.GetRawCertData(); 
      Console.WriteLine ("The certificate will be added to the Root..."); 
      store.Add (cert); 
      Console.WriteLine("Verify, that the certificate are added successfully"); 
      Console.ReadKey(); 
      Console.WriteLine ("The certificate will be removed from the Root"); 
      store.Remove (cert); 
      store.Close(); 
     } 
    } 
} 
+0

Tôi vừa thử điều này trên Máy tính Windows 7 của mình. Bạn cần quyền quản trị để làm việc đó. Tôi nghĩ có nghĩa là quản trị viên có thể cài đặt chứng chỉ gốc đáng tin cậy cho máy cục bộ mà không có lời nhắc trực quan. – Stefan

+0

@Stefan: Tất nhiên ** chỉ quản trị viên ** mới có thể cài đặt ** chứng chỉ gốc trong máy * cục bộ * **, nhưng đặc biệt là việc cài đặt chứng chỉ trong trường hợp cần đôi khi im lặng. Hãy suy nghĩ về các thiết lập cho ví dụ. Vì vậy, tôi thấy không có vấn đề trong những gì bạn đã viết. – Oleg

+0

Tôi chỉ muốn chỉ ra (đối với những người khác ngại khi trả lời câu hỏi này) rằng chỉ quản trị viên mới có thể làm điều đó, không chỉ bất kỳ người dùng nào. Điều đó không rõ ràng với tôi ngay sau khi đọc câu trả lời của bạn. Nhưng nếu không +1 cho thông tin chi tiết và mẫu mã hữu ích – Stefan

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