Để truy cập vào dịch vụ web, tôi cần chứng chỉ.Lưu trữ Chứng chỉ X509 trong cơ sở dữ liệu
tôi tạo Certs tôi:
openssl genrsa 1024 > private.key
openssl req -new -x509 -nodes -sha1 -days 1100 -key private.key > public.cer
sau đó sáp nhập hai này thành một giấy chứng nhận PFX bởi
openssl pkcs12 -in public.cer -inkey private.key -export -out client.pfx
sau đó nạp tập tin PFX tôi như X509Certificate2
X509Certificate2 clientCert = new X509Certificate2("cert.pfx", "password");
Bây giờ, tôi sẽ muốn tạo bảng vào cơ sở dữ liệu chứa các trường sau:
PrivateKey NVARCHAR
PublicCer NVARCHAR
Password NVARCHAR
Sau đó sao chép nội dung từ tệp private.key, cùng với ----- BEGIN GIẤY CHỨNG NHẬN ----- và ----- GIẤY CHỨNG NHẬN -----, tương tự cho public.cer và đặt mật khẩu. Bây giờ, làm thế nào tôi có thể có được một trường hợp thích hợp của X509Certificate2 bằng cách đọc dữ liệu này từ DB? Nói cách khác, làm cách nào để tạo tệp pfx từ mã, dựa trên khóa cá nhân và chứng chỉ?
Tôi sẽ cố gắng để được chính xác hơn:
string connectionString; string query; string cert;
connectionString = ConfigurationManager.ConnectionStrings[0].ConnectionString;
query = "SELECT clientcert FROM settings_services WHERE ID = 1";
using (SqlConnection cn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(query, cn);
cn.Open();
cert = (string)cmd.ExecuteScalar();
}
X509Certificate2 serverCert = new X509Certificate2(Encoding.UTF8.GetBytes(cert));
Mã này sẽ được tải một cách chính xác một chuỗi chứng chỉ (chứng chỉ x509, bắt đầu với ----- BEGIN CERTIFICATE ----- và kết thúc --- --END CHỨNG NHẬN -----).
Bây giờ tôi cần phải nhận được khóa bí mật:
khóa riêng của tôi là ở định dạng RSA (----- BEGIN RSA PRIVATE KEY ---- vv ...)
tôi cần phải tải nó và gán nó cho serverCert, để có thể sử dụng chứng chỉ này để xác thực trên dịch vụ web.
Bất kỳ đề xuất nào về cách thực hiện điều đó?
Câu trả lời cho vấn đề này bạn sẽ tìm thấy nó ở đây. http://www.codeproject.com/KB/security/CertificatesToDBandBack.aspx Kính trọng –
Liên quan: https://stackoverflow.com/questions/893757 – explunit