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"