14

IISユーザーにpfx証明書へのアクセスを許可する必要があります。Webサイトは、一部のユーザーAppPoolUserのAppPoolの下で実行されています。IISには自動的に「IISAPPPOOL\AppPoolUser」というユーザー名が付けられます。これは、aspnet_regiis-gaを使用するときにアクセスを許可するために必要なものです。

ただし、winhttpcertcfgを使用してユーザー「IISAPPPOOL \ AppPoolUser」にアクセスを許可すると、「アカウント情報が見つかりませんでした」と表示されます。

私が使用するコマンドは

winhttpcertcfg -i <filename> -c <certificateLocation> - g -a <account name>

ウェブ上でこれのサンプルは見つかりませんでした。何か案は?

4

7 に答える 7

12

古い質問だと思いますが、昨日同じ問題が発生したので、答えます。

私は同じ問題を抱えていましたが、証明書が LocalMachine -> TrustedPeople ストアにあります...

このリンクから取得したicaclsの代わりに使用する必要があります。WinHttpCertCfg

基本的には、次のようになります。

ICACLS <filename> /grant "IIS AppPool\DefaultAppPool":R

完成させるために、「Trusted People」ストアにアクセスするために必要な方法をここに示します。このリンクから一部を抜粋。

  1. Microsoft のFindPrivateKey ツールを使用して、ストア内の証明書の実際のファイルを見つけます。このツールは、.NET Framework 4ダウンロード用の Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) サンプル.\WF_WCF_Samples\WCF\Setup\FindPrivateKey\CSのソース コードからコンパイルする必要があります。

    FindPrivateKey.exe TrustedPeople LocalMachine -t "<thumbprint of the SSL cert>"
    
  2. icaclsFindPrivateKey で指定されたファイルで使用します。

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\<path to certificate> /grant "IIS AppPool\<your AppPool name>":R
    

ほら!

于 2012-01-04T14:59:35.710 に答える
8

元の投稿では、ドメイン「IIS APPPool」をマシンのローカル ドメイン名 (通常はマシンと同じ名前) に置き換えるだけです。WinHttpCertCfg が実行されると、<MachineName>\<AppPoolUser> が <IIS APPPOOL>\<AppPoolUser> に変換され、証明書へのアクセスが許可されます。ローカル IIS を使用して開発デスクトップで作業する場合は、これで問題が解決するはずです。 ICACLS はサーバー (最終的に展開するサーバー) でのみ機能します。

于 2012-07-20T14:34:06.047 に答える
6

mmcこれは、証明書スナップインから行うこともできます。

問題の証明書を右クリックして、 を選択All Tasks -> Manage private keys...し、必要なユーザー (おそらくIIS APPPOOL\[your app pool]) を追加します。

于 2013-12-12T14:54:10.253 に答える
6

Update/tl;dr — PowerShell Core 用のCertAdminモジュールを作成して、証明書のアクセス許可を簡単に取得および設定できるようにしました。

私は同じ問題を抱えていました:

  • WinHttpCertCfg合理的な代替手段なしに放棄されたようです。
  • この古い MSDN ブログ投稿に記載されているように、証明書マネージャーには「秘密キーの管理」オプションが含まれていませんでした。
  • コンパイルFindPrivateKeyは、Windows 環境では不当なオーバーヘッドです。

証明書のアクセス許可を設定するには、証明書ファイルに対する読み取り権限をアプリケーション プールに付与する必要があります。

これは、icacls.exe を使用して実現できます (Windows エクスプローラーのセキュリティ UI はアプリケーション プールをサポートしていません)。

icacls C:\ProgramData\Microsoft\crypto\rsa\machinekeys\9876abcdeblahblahblah /grant "IIS AppPool\AppPoolName:R" 

Windows はマシン キーを にC:\ProgramData\Microsoft\Crypto\RSA\MachineKeys保存しますが、ファイルの名前は証明書とは関係ありません。各証明書のファイル名は、次の PowerShell コードを使用して取得できます。

 ls Cert:\LocalMachine\TrustedPeople |
    select Subject,@{n='FileName';e={$_.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName}} |
    Format-List

(証明書が別のストアにある場合は、「TrustedPeople」を変更してください。)

アプリケーション プールの名前は、IIS マネージャーの [アプリケーション プール] ノードから取得するか、次の PowerShell コードを実行して取得できます。

Import-Module WebAdministration; ls IIS:\AppPools

この PowerShell 3 スクリプトは、Out-GridView (ogv) を証明書とアプリ プールの GUI 選択リストとして使用し、アクセス許可を付与します。

ipmo WebAdministration
$cert = (ls Cert:\LocalMachine\TrustedPeople |
    ogv -OutputMode Single -Title "Select Certificate").
    PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$app = (ls IIS:\AppPools |
    ogv -OutputMode Single -Title "Select App Pool").Name
icacls $env:ProgramData\Microsoft\crypto\rsa\machinekeys\$cert /grant "IIS AppPool\$($app):R"
于 2014-02-11T21:53:51.467 に答える
3

アプリケーションをインストールすると、ドキュメントも追加されます。

C:\Program Files (x86)\Windows Resource Kits\Tools

次の例は、構成ツールを使用できるいくつかの方法を示しています。

このコマンドは、レジストリの LOCAL_MACHINE ブランチの「ルート」証明書ストアにある「MyCertificate」証明書の秘密鍵にアクセスできるアカウントを一覧表示します。

winhttpcertcfg -l -c LOCAL_MACHINE\Root -s MyCertificate

このコマンドは、TESTUSER アカウントの「My」証明書ストアにある「MyCertificate」証明書の秘密鍵へのアクセスを許可します。

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

このコマンドは、証明書と秘密キーを PFX ファイルからインポートし、秘密キー アクセスを別のアカウントに拡張します。

winhttpcertcfg -i PFXFile -c LOCAL_MACHINE\My -a IWAM_TESTMACHINE

このコマンドは、指定された証明書を持つ IWAM_TESTMACHINE アカウントの秘密鍵へのアクセスを削除します。

winhttpcertcfg -r -c LOCAL_MACHINE\Root -s MyCertificate -a IWAM_TESTMACHINE
于 2011-09-16T15:30:46.753 に答える
0

私からうまくいくのは、ステージング サイトがネットワーク サービス (アプリ プール) (展開) にあり、ローカルに "applicationpoolidentity" (作業コピー) があることです。

それを applicationpoolidentity に変更して winhttpcertcfg コマンドを実行するだけです

于 2014-11-25T08:45:13.997 に答える