【发布时间】:2011-02-08 13:42:53
【问题描述】:
为了访问网络服务,我需要一个证书。
我生成了我的证书:
openssl genrsa 1024 > private.key
openssl req -new -x509 -nodes -sha1 -days 1100 -key private.key > public.cer
然后将这两者合并为一个 pfx 证书
openssl pkcs12 -in public.cer -inkey private.key -export -out client.pfx
然后将我的 pfx 文件加载为 X509Certificate2
X509Certificate2 clientCert = new X509Certificate2("cert.pfx", "password");
现在,我想在数据库中创建一个包含以下字段的表:
PrivateKey NVARCHAR
PublicCer NVARCHAR
Password NVARCHAR
然后从 private.key 文件中复制内容,连同 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----,与 public.cer 相同,并设置密码。 现在,如何通过从 DB 读取这些数据来获得 X509Certificate2 的正确实例? 换句话说,如何根据私钥和证书从代码生成 pfx 文件?
我会尽量准确:
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));
此代码将正确加载证书字符串(x509 证书,以 -----BEGIN CERTIFICATE----- 开头并以 -----END CERTIFICATE----- 结尾)。
现在我需要获取私钥:
我的私钥是 RSA 格式(-----BEGIN RSA PRIVATE KEY---- etc...)
我需要加载它,并将其分配给 serverCert,以便能够使用此证书在 Web 服务上进行身份验证。
关于如何做到这一点的任何建议?
【问题讨论】:
-
这个问题的答案你会在这里找到。 codeproject.com/KB/security/CertificatesToDBandBack.aspx 问候
标签: c# .net certificate x509certificate pfx