Web サービスにアクセスするには、証明書が必要です。
私は自分の証明書を生成しました:
openssl genrsa 1024 > private.key
openssl req -new -x509 -nodes -sha1 -days 1100 -key private.key > public.cer
次に、この2つを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---- など...)
この証明書を Web サービスでの認証に使用できるようにするには、それをロードして serverCert に割り当てる必要があります。
それを行う方法に関する提案はありますか?