2014-07-23 13 views
5

Ngày tốtSystem.Security.Cryptography.CryptographicException: Keyset không tồn tại trong Visual studio

Tôi đang gặp vấn đề nghiêm trọng khi ấn định khóa riêng do lỗi này.

System.Security.Cryptography.CryptographicException: Keyset does not exist

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

var col = store.Certificates.Find(X509FindType.FindBySerialNumber, "00873476DC47C5BB614EA96F2A9CE744A6", false); 
var cert = col[0]; 
var xmlUnSignedSaml = new XmlDocument(); 
xmlUnSignedSaml.LoadXml(assertion); 
xmlUnSignedSaml.PreserveWhitespace = true; 
SignedXml signedXml = new SignedXml(xmlUnSignedSaml); 

signedXml.SigningKey = cert.PrivateKey; //<<<--- Exception thrown. 

Tôi đã xác minh những điều sau đây:

  1. Giấy chứng nhận HAS một khóa riêng.
  2. Đọc Quyền trên chứng chỉ được cấp cho IUSR, DỊCH VỤ MẠNG, DỊCH VỤ ĐỊA PHƯƠNG và bối cảnh người dùng cục bộ trên Bảng điều khiển MMC. Chứng chỉ nằm trong thư mục localMachine - Personal
  3. Các quyền Đọc tương tự được cung cấp cho thư mục machinekeys tại “C: \ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys”.

Tôi đã kiểm tra các câu trả lời ở trang sau, nhưng tuyệt đối không ai trong số họ làm việc cho tôi:

Tôi đang chạy ứng dụng từ bên trong Visual Studi o và tại đoạn mã ở trên, nó ném ngoại lệ đang cố gắng đặt SignedXml's SigningKey

Tôi có thể làm gì khác để thiết lập và chạy ứng dụng này? (suy nghĩ lại, tôi cũng đã cố gắng "Mọi người" cho phép trên các CERT và thư mục - thậm chí là ném cùng một ngoại lệ)

Trả lời

4

Tôi đã giải quyết vấn đề của tôi bằng cách sử dụng các bước sau:

  1. Downloaded các WCF_Samples từ Microsoft có quyền truy cập vào giải pháp FindPrivateKey - 15.5mb in size.
  2. Giải nén tệp zip
  3. Điều hướng đến WCF_Samples \ WCF \ Setup \ FindPrivateKey \ CS \ FindPrivateKey.sln và xây dựng nó. ctrl+shift+B.
  4. Đã thêm dòng mã sau vào phương thức Main(string args[]) Vì tôi lười và không muốn làm điều đó thông qua bảng điều khiển: args = new string[] { "My", "LocalMachine", "-t", THUMBPRINT_OBTAINED_IN_MMC, "-a" };
  5. Chạy ứng dụng. Tôi tìm thấy đường dẫn đến khóa và điều hướng đến nó. Nó chỉ ra rằng các điều khoản trên chính nó là KHÔNG SET

Tôi đã thay đổi quyền trên chính nó và ứng dụng của tôi bắt đầu hoạt động.

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