Home > Windows にまつわる e.t.c.

X.509 証明書の Private Key 場所を PowerShell で調べる


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

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.