クライアント証明書を使用して署名するための次の .Net コード (asp.net) があります。
現在のユーザーではなく、ローカル コンピューターにクライアント証明書が保存されています。
クライアント証明書は pfx pkcs#12 で、秘密鍵があります
インポートされた秘密鍵は、エクスポート可能としてマークされていません。
パスワードで保護されたクライアント証明書の秘密鍵。
上記の最後の行で、「復号化のための証明書と秘密鍵が見つかりません」というエラーが表示されます。
私のコードを使用すると、秘密鍵にアクセスできないようです。
秘密鍵をクライアント証明書に関連付ける方法はありますか? 助言がありますか ?
public void FirmarConCertificado(string nombreCertificado, X509Certificate2 certificate)
{
try
{
var mensaje = "Datos de prueba";
System.Text.Encoding enc = System.Text.Encoding.Default;
byte[] data = enc.GetBytes(mensaje);
var contentInfo = new System.Security.Cryptography.Pkcs.ContentInfo(data);
var signedCms = new System.Security.Cryptography.Pkcs.SignedCms(contentInfo, true);
var cmsSigner = new System.Security.Cryptography.Pkcs.CmsSigner(certificate);
// Sign the CMS/PKCS #7 message
signedCms.ComputeSignature(cmsSigner); // <<<<<<< FAILS HERE
// Encode the CMS/PKCS #7 message
var ret = Convert.ToBase64String(signedCms.Encode());
Message.Text += "Firmado con Certificado " + nombreCertificado + " encontrado en " + StoreLocation.LocalMachine;
}
catch (Exception ex)
{
Message.Text = "Error al firmar con certificado: " + ex.ToString();
Message.Text += "<br /><br />InnerException: " + ex.InnerException;
}
}
編集: AppPool の ID に問題がある可能性があります。LocalMachine Store に証明書をインストールするユーザーは、WebSite の AppPool の ID であり、IIS_WPG グループに属している必要があります。
解決策: ドメインにユーザーを作成し、IIS_WPG グループに追加し、Identity AppPool として追加します。作成したユーザーを使用して、ローカル コンピューターのストアに証明書をインストールします。