Tôi có chứng nhận X509Certificate được lưu trữ trong cơ sở dữ liệu (trong byte[]
) để ứng dụng của tôi có thể truy xuất chứng chỉ và sử dụng nó để ký JWT của tôi.Không thể truy cập PrivateKey X509Certificate2 của tôi trong Azure
Chứng chỉ x509 của tôi được chuyển qua tệp .pfx mà tôi đã tạo trên máy của mình, tuy nhiên giờ nó nằm trong cơ sở dữ liệu dưới dạng chuỗi byte.
Ứng dụng của tôi hoạt động hoàn toàn tốt tại địa phương khi tôi chạy. Ứng dụng có thể tạo một thể hiện của X509Certificate2 đó một cách chính xác và sử dụng nó cho các yêu cầu của tôi, tuy nhiên vấn đề nảy sinh khi tôi cố gắng sử dụng nó trong ứng dụng web azurewebsites của tôi.
Về cơ bản tôi không thể truy cập instance variable PrivateKey của giấy chứng nhận, tôi nhận được một ngoại lệ
System.Security.Cryptography.CryptographicException: Keyset does not exist
Và tôi lại instantiating giấy chứng nhận với điều này
var cert = new X509Certificate2(myCertInBytes, myCertPass,
X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.MachineKeySet |
X509KeyStorageFlags.Exportable);
Tôi đang sử dụng ASPNET 5 rc1 -update1. Tôi cũng đã cố gắng chạy này trên một máy tính khác nhau và nó hoạt động tốt, chỉ có vấn đề này khi tôi xuất bản để Azure. Và cũng để thêm một cái gì đó khác, Ứng dụng này đã hoạt động khi tôi đang chạy cùng một dự án đang chạy sử dụng phiên bản DNX beta7
Bất kỳ trợ giúp nào được đánh giá cao.
Bạn có chắc chắn chứng chỉ trong cơ sở dữ liệu của mình đã bao gồm bộ khóa cá nhân không? Nó không phải là một chứng nhận công khai bởi bất kỳ cơ hội, phải không? –
@ ZainRizvi nó là chắc chắn bao gồm, tôi có thể lấy chìa khóa riêng tư, (từ X509 Cert trên Azure DB) nếu tôi chạy khóa tại chỗ tại chỗ. Tuy nhiên nó không thể được lấy ra khi tôi triển khai nó để Azure. – Lutando