2009-12-13 32 views
5

Sau khi cài đặt chứng chỉ phía máy khách, tôi nhận được ngoại lệ "Đối tượng chỉ chứa nửa công khai của cặp khóa. Khoá cá nhân cũng phải được cung cấp". Ứng dụng của tôi là một ứng dụng VC# .NET chạy trên nền tảng ASP.NET. Ứng dụng này cũng sử dụng WSE 2.0 để nhập chứng chỉ vào thực hiện các yêu cầu SOAP.Đối tượng chỉ chứa nửa công khai của cặp khóa

Khi nghiên cứu, tôi thấy rằng ngoại lệ này thuộc loại System.Security.Cryptography.CryptographicException.

Tôi khá tích cực tất cả các cài đặt WSE của tôi được định cấu hình chính xác, vì tôi có thể tìm thấy chứng chỉ tương tự theo tên phân biệt chủ đề. Bất cứ ý tưởng sẽ được đánh giá cao.

Trả lời

12

Gần đây tôi đã gặp sự cố tương tự. Tôi tìm thấy one explanation here có hiệu quả đối với tôi. Cụ thể, các quyền cho khóa riêng. Thông tin đầy đủ được sao chép bên dưới.

Có một vài điều mà tôi sẽ nhìn đầu tiên:

  1. Bạn có một khóa riêng cho chứng chỉ này?
  2. Bạn đã cho phép ứng dụng youf truy cập vào khóa riêng ?

Bạn có thể xác định xem mình có khóa cá nhân bằng cách xem chứng chỉ thông qua Cửa hàng chứng chỉ Windows hay không. Để thực hiện việc này, hãy làm theo các bước sau:

  1. Từ menu Bắt đầu của Windows, chọn Chạy.
  2. Nhập mmc trong trường Mở:. Nhấp vào OK
  3. Chọn "Thêm/xóa trình cắm" từ menu Tệp.
  4. Nhấp vào nút Thêm.
  5. Chọn "Chứng chỉ" từ danh sách các Plugin độc lập khả dụng. Nhấp vào nút Thêm.
  6. Chọn "Tài khoản máy tính". Bấm tiếp.
  7. Chọn "Máy tính cục bộ". Nhấp vào Kết thúc.
  8. Nhấp vào Đóng.
  9. Nhấp vào OK.
    1. Mở rộng nút Chứng chỉ dưới Gốc điều khiển và mở Cửa hàng cá nhân.
    2. Nhấp đúp vào Chứng chỉ bạn đang sử dụng. Nếu bạn có khóa riêng , hộp thoại sẽ hiển thị thông báo ở cuối thông báo "Bạn có một khóa riêng tư tương ứng với giấy chứng nhận " này.

Nếu bạn có một khóa riêng, sau đó đảm bảo rằng ứng dụng của bạn có quyền để truy cập chính:

  1. Mở Windows Explorer.
  2. Điều hướng đến thư mục C: \ Documents and Settings \ All Users \ Application Dữ liệu \ Microsoft \ Crypto \ RSA \ MachineKeys .
  3. Chọn tệp chứa các khóa mà WSE sẽ cần để truy xuất.
  4. Từ menu Tệp, chọn Thuộc tính.
  5. Trên tab Bảo mật, thêm tài khoản ASPNET và chọn e Đầy đủ Tùy chọn điều khiển.
  6. Ghi chú: 1. Xác định tệp khóa nào trong thư mục MachineKeys là được liên kết với chứng chỉ có thể là khó khăn. Một phương pháp dễ dàng là lưu ý ngày và giờ tạo khi tạo chứng chỉ mới. Khi bạn xem các tệp trong thư mục MachineKeys , hãy kiểm tra trường Ngày sửa đổi cho ngày tương ứng và thời gian. 2. Nếu bạn đã định cấu hình hệ thống của mình chạy dưới một tài khoản khác với ASPNET, hãy sử dụng tài khoản đó khi cấp quyền truy cập chứng chỉ.
+1

Cảm ơn. Điều đó đã giúp. (Tôi đã có một khóa riêng, nhưng ứng dụng của tôi không có quyền truy cập vào nó). – KKP

+0

kiểm tra câu trả lời này về cách tìm ra khóa máy tương ứng với chứng chỉ: http://serverfault.com/a/642279/401044 – jtate

0

Sau khi gặp phải cùng một ngoại lệ: System.Security.Cryptography.CryptographicException, Object chứa chỉ có một nửa công chúng về một cặp khóa, tôi khả năng chống một sự thay thế, nhưng giải pháp ít tối ưu.

Tình huống: Chứng chỉ/khóa tra cứu hoạt động tốt bên trong Visual Studio IIS Express, nhưng trong khi Ứng dụng Web đang chạy dưới dịch vụ IIS thích hợp, tôi luôn nhận được ngoại lệ 'Chỉ chứa một nửa cặp khóa'.

Tôi đã sử dụng WSE3 CertificateTool để định vị phần khóa cá nhân trên hệ thống tệp và cố gắng điều chỉnh cài đặt quyền người dùng để cấp quyền người dùng ASP theo câu trả lời ở trên.

Sửa lỗi cuối cùng của tôi không đẹp, là tạo một Hồ bơi ứng dụng IIS mới cho mã dịch vụ Web của tôi và thiết lập nhận dạng người dùng mà nhóm chạy với tư cách là chủ sở hữu máy cục bộ của chứng chỉ + khóa riêng.

Vị trí cuối cùng mà tôi đã cài đặt chứng chỉ là "Máy tính cục bộ/Người đáng tin cậy".

Sử dụng WSE3 CustomPolicyAssertion, C# .NET:

clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine, 
    StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName); 

Sau khi cập nhật App Pool Identity, không ghi đè tập tin khóa riêng là cần thiết khi thay đổi chủ sở hữu hồ bơi ứng dụng.

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