ADFS の証明書更新手順を調べていたら、Private Key の ACL 変更が不思議な所にあったので、どうなっているのか調べた時のメモです。
Windows OS でインポートした X.509 証明書の Private Key は、物理ファイルとして存在しており、ACL 変更も可能になっています。
まずは、取り込まれている証明書の一覧
PS C:\> # 証明書一覧(コンピュータ証明書) PS C:\> Get-ChildItem Cert:\LocalMachine\My PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------- FEEFE1D4D77BDF5B934CA79B3EBB17A9456E9xxx CN=xxxxxCertificate D1F8E8F096F1F73A37991701B01BE6691315Exxx CN=NetworkEquipment C86EDBC71AB05078F61ACDF3D8DC5DB61EB75xxx CN=RapidSSL SHA256 CA, O=GeoTrust Inc., C=US 9B69695ABEDF8DFACC22CF07C0553E24B5E54xxx CN=xxxxxProjectCredential 8CD4695F86C73F91EADD63E040E290F8B3AE0xxx CN=xxxxxNetworkCert PS C:\> # 証明書を拇印(Thumbprint)で選択 PS C:\> $Cert = Get-ChildItem Cert:\LocalMachine\My | ? Thumbprint -eq D1F8E8F096F1F73A37991701B01BE6691315Exxx |
Private Key を持っている証明書であれば、PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName に Private Key の物理ファイル名が格納されています
PS C:\> # Private Key の物理ファイル名確認 PS C:\> $Cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName c7710a6c99cc5b26b7956ae1b1d21ea0_9d8fa460-b05b-4c7a-ba52-7c0fb3aff3c2 |
Private Key は C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys にあります
PS C:\> # Private Key のフルパス PS C:\> $PrivateKeyPath = Join-Path C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys c7710a6c99cc5b26b7956ae1b1d21ea0_9d8fa460-b05b-4c7a-ba52-7c0fb3aff3c2 |
ACL を変更したいのであれば、こんな感じにします
PS C:\> $ACL= Get-ACL $PrivateKeyPath PS C:\> $ACL ディレクトリ: C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys Path Owner Access ---- ----- ------ c7710a6c99cc5b26b7956ae1b1d21ea0_9d8fa460-b05b-4c7a-ba52-7c0fb3aff3c2 BUILTIN\Administrators NT AUTHORITY\SYSTEM Allow FullControl... PS C:\> $Permission = "Authenticated Users","Read","Allow" PS C:\> $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule $Permission PS C:\> $ACL.AddAccessRule($AccessRule) PS C:\> Set-Acl $PrivateKeyPath $ACL |
Copyright © MURA All rights reserved.