質問

働いている会社は多くのサーバーやパソコンのステータスです。サーバー win2003、PCの開発をも行わないものとします。

サーバWin2003名preiis01、試環境、その他の人が会社トクライアント証明書を使用(他のユーザー domainCompany\adminsystems)ログインするためのサーバー preiis01.

誰でも管理者のユーザー"domainCompany\adminsystems"のためのログインサーバpreiis01用端末サーバのリモートデスクトップWindows XPの場合).

の管理者ユーザーはdomainCompany\adminsystems"を設置。

管理者ユーザーがインストールすようになります:

セッションのログインのように"domainCompany\adminsystems" 証明書はPFXファイルです。いPFXイ用ウィザードを閉じます。の鍵をチェックしません。パスワードを入力しインストールします。

アプリケーションWebるAppPoolアイデンティティ:ネットワークサービス。

webサーバー IIS6.0.

にpreiis01,

その管理者ユーザーを実行しmmc->スナップ-イン->証を行います。ノード->個人->券かし、クライアント証明書:

発行ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1

発行FNMT Clase2CA

物件の証明書のthumbprint:"93bc a4ad58c9 3c af8b eb0b2f86c7 9d81 70a6c4 13"

その管理者ユーザーを実行するこのコマンド:

winhttpcertcfg.exe LOCAL_MACHINE\My-s"ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1"-g-a"ネットワークサービス"

結果は:

マッチング証明書

CN=ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1

OU=703015476

OU=FNMT Clase2CA

O=FNMT

C=ES

付与鍵へのアクセス アカウント:NT権限\ネットワークサービス

現在、管理者ユーザーがこのコマンドを実行す:

winhttpcertcfg.exe -l-c LOCAL_MACHINE\My-s"ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1"

その結果:

マッチング証明書

CN=ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1

OU=700012476

OU=FNMT Clase2CA

O=FNMT

C=ES

追加債権およびグループ アクセスの非公開鍵を含む:domainCompany\adminsystems NT 権限\システム ビルトイン\管理者NT 権限\ネットワークサービス

現在、aspxページ用webサーバWin2003,IIS6.0、このコード:

注意:値X509Certificate2.HasPrivateKeyAccess()がfalseのための"ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1"証明書。

ASP.NET 申請実行用のアイデンティティ:NT権限\ネットワークサービス

lbInfo.Text += "<br/><br/>ASP.NET application executes using the identity :: <b>" + WindowsIdentity.GetCurrent().Name + "</b><br>";


            var store = new X509Store(StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            Certificates = store.Certificates;
            repeater1.DataSource = Certificates;
            repeater1.DataBind();

            var nombreCertificado = "ENTIDAD COMPANY INSURE SA - CIF A93 - NOMBRE SURNAME1 NAME1";

            store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);

            X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, nombreCertificado, false);

            if (col.Count > 0)
            {
                X509Certificate2 certificate = col[0];
                store.Close();
                Message.Text = "Certificado " + nombreCertificado + " encontrado en " + StoreLocation.LocalMachine;

                FirmarConCertificado(nombreCertificado, certificate);

            }
            else
            {
                store.Close();
                Message.Text = "El certificado " + nombreCertificado + " no esta instalado en la máquina";
            }


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);

                //  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;
 }

}

このコードに失敗したいてくださったお陰で、このエラー:きの証明書および秘密鍵のアルゴリズム.

エラーライン:signedCms.ComputeSignature(cmsSigner);

エラーアfirmarコンcertificado:システム。ます。暗号通信を提案している。CryptographicException:きの証明書 めのアルゴリズム.

時 システム。ます。暗号通信を提案している。Pkcs.PkcsUtils.CreateSignerEncodeInfo(CmsSigner 署名者,Boolean silent) システム。ます。暗号通信を提案している。Pkcs.SignedCms.サイン(CmsSigner 署名者,Boolean silent) システム。ます。暗号通信を提案している。Pkcs.SignedCms.ComputeSignature(CmsSigner 署名者,Boolean silent) システム。ます。暗号通信を提案している。Pkcs.SignedCms.ComputeSignature(CmsSigner 署名者) ASP.dgsfp_test_testcert_aspx.FirmarConCertificado(String nombreCertificado,X509Certificate2 証明書) c:\社\App\試験 estCert.aspxライン 242

その後、管理者ユーザーさんは、設置の証明書)を実行するこのコマンド:

FindPrivateKeyっLocalMachine-t"93 bc a4ad58c9 3c af8b eb0b2f86c7 9d81 70a6c4 13"–c

FindPrivateKey 私LocalMachine-n"ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1"を

FindPrivateKeyっLocalMachine-n "CN=ENTIDAD社保SA-CIF A93-NOMBRE SURNAME1NAME1" –a

結果はすべての3つのコマンドは同じです:

FindPrivateKeyをユーザーの 立地の秘密鍵ファイルの X.50 9証明書。

使用量:FindPrivateKey[{{n}|{t} }[f|-d|-a】]

対象の名前 証明書

thumbprintの 証明書の使用certmgr.exe 得 で)

-f出力ファイル名み

-d出力ディレクトリのみ

-a出力ファイルの絶対 氏名などのFindPrivateKeyっ CurrentUser-n"CN=John Doe"

例えばFindPrivateKeyっLocalMachine-t "03 33 98 63d0 47e7 48 71 33 62 64 76 5c4c9d42 1d6b52"-c

FindPrivateKeyないものがwinhttpcertcfg.exe -l服のマッチング証明書)

として、権限のネットワークサービスを使うユーザwinhttpcertcfg.exe ツール、コードASP.NET (実行の下でのネットワークサービスのアカウント)は、証明書が見られる。が失敗した場合に署名用証明書。

あおいて、一部の情報やご提案を

更新:

ユーザーのドメイン"domainCompany\Pre_Certificado"インストール証明書店舗を行います。

domainCompany\Pre_Certificadoは管理者は、IIS_WPGグループ地域政策"ログインとしてサービス"

Iを設定しAppPoolアイデンティティIIS6.0のために:domainCompany\Pre_Certificado

ASP.NET 申請実行用のアイデンティティ:domainCompany\Pre_Certificado

私はリサイクルAppPool実行の申請を取得します。ます。暗号通信を提案している。CryptographicException:きの証明書および非公開鍵暗号解読

私がテストを再ログインセッションサーバー IISを利用domainCompany\Pre_Certificadoユーザーであり、私のページASP.NET 申請は、すべてがOKです。

(注:ログインサーバー IISを利用端末サーバー)

だがログオフセッションサーバー IIS(ユーザ:domainCompany\Pre_Certificado)でも同様のエラー:

システム。ます。暗号通信を提案している。CryptographicException:きの証明書および非公開鍵暗号解読

あらゆる提案??

役に立ちましたか?

解決

ご確認下さい。 文書 でを解決するものとします。私はブレーデントンでおすすめのホテ利用には以下のコマンドオプション:

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a TESTUSER 

他のヒント

の第2ステップとして同じという IIS7.5(ここをクリック)

  1. を購入証明書。だいするものとする。
  2. 輸入の証明書は、"地域コンピュータ"。使用証明書MMC. 必ず確認のことで鍵のエクスポートする"
  3. 実行は以下のコマンドとして管理者が行います。交換後

    • 交換[件名]の証明書の対象と使用見積書が含まれている場合。と思いきもを入れるだけ最初の単語などはありません別のcert始まるのです。
    • 交換[店舗】の証明書店で輸入し、デフォルトだと思いは"ROOT"または"私"にIIS6、"LOCAL_MACHINE\ルート"または"LOCAL_MACHINE\私"
    • 交換[computername]の名前です。ることができるかもしれませています。\" 表記[computernam](".\ネットワークサービス"もしていないたします。

winhttpcertcfg.exe -g-a"computername]\ネットワークサービスを"-c LOCAL_MACHINE\[Store]-s"[件名]"

注意: る場合にはASP.NET アプリケーションプールの下でのアイデンティティその他にも"ネットワークサービス"だの変化"ネットワークサービス"に上記のコマンドは、これまでのIIS用プールがあります。

場合に付与する必要がありアクセスの匿名ユーザもございますの場合は可能な匿名のアクセスの要求に走っているの匿名ユーザはネットワークサービスです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top