2010-01-20 35 views
7

Tôi đang cố sử dụng chứng chỉ X509Certificate trong một dịch vụ web ASP.NET trong Cloud Rackspace. Tôi có cảm giác chứng chỉ lưu trữ trên các nút trên đám mây có thể gây ra sự cố. Tôi cũng có một câu hỏi liên quan đến điều này với các ngoại lệ mà tôi đang nhận tại SslStream.AuthenticateAsClient Exception when using iPhone Apple Push Notification Provider (apns-sharp) C#Tôi có thể sử dụng X509Certificate2 trong ASP.NET mà không cần sử dụng kho chứng chỉ không?

Trong dự án APNS sắc Tôi đã sử dụng đoạn mã sau:

certificate = new X509Certificate2(p12File) 

Tuy nhiên tôi nhận được một ngoại lệ và thay đổi mã sau đây đã giải quyết ngoại lệ X509Certificate2. Mã mới như sau:

certificate = new X509Certificate2(p12File, String.Empty, X509KeyStorageFlags.MachineKeySet); 

Tôi muốn biết liệu tôi có thể sử dụng X509Certificate2 trong ASP.NET mà không sử dụng kho chứng chỉ không? Các kho lưu trữ chứng chỉ có gây ra vấn đề với các nút Cloud Rackspace không?

Cập nhật # 1 Rackspace cho tôi biết rằng không được phép truy cập kho lưu trữ chứng chỉ máy cục bộ. Có cách nào khác để bỏ qua sử dụng kho chứng chỉ không? Có thể sử dụng thư viện của bên thứ ba?

Trả lời

4

Lý do hàm tạo đầu tiên không hoạt động là ASP.NET không tải kho lưu trữ hồ sơ người dùng, đây là cửa hàng mặc định nếu bạn không chỉ định vị trí lưu trữ sử dụng X509KeyStorageFlags. Tuy nhiên, cửa hàng máy luôn được nạp bởi ASP.NET, đó là lý do tại sao hàm tạo thứ hai hoạt động.

Tôi giả định rằng bạn định sử dụng khóa riêng trên chứng chỉ mã hóa hoặc tạo chữ ký số (băm), trong trường hợp này bạn không thể tránh sử dụng kho chứng chỉ vì khóa riêng tư chỉ có thể truy cập được từ chương trình chứng chỉ được nhập và không trực tiếp từ các tệp màu hoặc tệp.

Tôi không nghĩ cửa hàng chứng chỉ được sử dụng nếu dữ liệu chứng chỉ chỉ chứa khóa công khai (vì không có dữ liệu nhạy cảm để bảo vệ) - Tôi đã nhận thấy rằng tôi chỉ cần chỉ định lưu trữ máy khi tôi định để làm việc với chứng chỉ có chứa khóa cá nhân.

Tôi không thể nhận xét về tình trạng Rackspace - có thể có vấn đề với việc nhập chứng chỉ trong mã đang chạy trong một môi trường đáng tin cậy một phần, vì tải vùng chứa khóa riêng yêu cầu các quyền cụ thể có thể không được cấp cho assembly của bạn.

+0

OK, cảm ơn. Tôi cho rằng chứng chỉ có chứa khóa cá nhân vì điều này đang được sử dụng cho dịch vụ Thông báo đẩy iPhone của Apple. Bạn có thể cung cấp thêm chi tiết về "có thể có vấn đề với việc nhập chứng chỉ trong mã đang chạy trong môi trường được tin cậy một phần hay không, vì việc tải vùng chứa khóa riêng yêu cầu các quyền cụ thể có thể không được cấp cho assembly của bạn." – Luke

+1

Ngoài ra, tôi đang chạy mã trên máy chủ của nhà phát triển của tôi bằng cách sử dụng cùng một tệp tin tin cậy vừa được sửa đổi mà Rackspace sử dụng ở cuối http://cloudsites.rackspacecloud.com/index.php/Overview_of_modified_Medium_Trust Tôi không nhận được bất kỳ ngoại lệ nào trên dev. máy chủ. – Luke

1

tôi đã nhập khẩu một X509Certificate2 từ một tập tin và có cả khóa bí mật và khóa công khai có sẵn sử dụng mã này:

  X509Certificate2 cert = new X509Certificate2(); 
      // Key Location: the physical file location (C:\cert.pfx) 
      // Key Password: the password for the certificate 
      cert.Import(keyLocation, keyPassword, X509KeyStorageFlags.Exportable); 

Kinh nghiệm của tôi là chìa khóa để có nó làm việc là X509KeyStorageFlags.Exportable. Không có điều đó, tôi không thể truy cập khóa riêng.

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