3

クライアント証明書を使用して署名するための次の .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 として追加します。作成したユーザーを使用して、ローカル コンピューターのストアに証明書をインストールします。

4

1 に答える 1

2

解決策: ドメインにユーザーを作成し、IIS_WPG グループに追加し、Identity AppPool として追加します。作成したユーザーを使用して、ローカル コンピューターのストアに証明書をインストールします。

于 2010-12-29T07:40:45.287 に答える