PFX証明書をマシンストアにインポートするPowershellスクリプトがあります。このスクリプトは、シェフによって呼び出されることを意図しています。私はそれを手動で実行すると、素晴らしい動作します。しかし、シェフがそれを実行すると、操作の半分しか完了していないようです。 MMCで、私は自分の証明書を見ることができ、Powershellは私の秘密鍵をインポートした後にそれを削除するのはなぜですか?
Examining certificate for import: c:\www\certificates\xyz.pfx
Importing as PFX
Thumbprint is 206E30F2694C8627C18EAE97729C643A3CC1317E
Enter PFX password:
Certificate "xyz" added to store.
CertUtil: -importPFX command completed successfully.
Updating private key permissions: C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\aee87c90ef6606b733130f970131e498_051677f6-7959-49c2-afb8-d2fad091409a
そして:私のログで
echo "Importing as PFX" >> $log
$rule = new-object security.accesscontrol.filesystemaccessrule ".\IIS_IUSRS", "Read", allow
$pfx = Get-PfxCertificate -FilePath $file
$certThumbprint = $pfx.Thumbprint
echo "Thumbprint is $certThumbprint" >> $log
"$password" | certutil -ImportPFX "$certStoreLocation" "$file" >> $log
$keyPath = "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\" + (((Get-ChildItem -Path cert:\LocalMachine\My | Where-Object { $_.thumbprint -eq $certThumbprint }).PrivateKey).CspKeyContainerInfo).UniqueKeyContainerName
echo "Updating private key permissions: $keyPath" >> $log
$acl = get-acl -path $keyPath
$acl.AddAccessRule($rule)
# Allow IIS to read this private key
set-acl $keyPath $acl
は、私が成功した出力を参照してください。しかし、ログに記載されているパスが見つからないため、プライベートキーを調べて調べると、そのパスが失われていると表示されます。繰り返しますが、これを自分で実行すると、うまくインポートされます。私は非常識つもり
思考は、私は何が起こっているかを確認するためにプロセスモニタを使用:
は、私はなぜ知らないが、PowerShellを削除するときのために秘密鍵をマークしているようですファイルを閉じます。何??なぜ???
注:
- それはCNG証明書ではなく、私が上で10〜12時間を失ったCSP証明書、としてそれをインポートするので、私は、インポート、PFXCertificateを使用することはできません。
- ACLの設定に関連するすべての部分を削除しても、問題は発生しません。しかし、私のアプリケーションは秘密鍵を読み取ることができません。
。私が見つけたのはシェフがLocalSystemとして走っていることです。私が疑うことは、証明書がローカル管理アカウントを含まない特定のADアクセスで作成されたことです。私はまだこれについては知らないが、誰もが何を思いつくのか興味がある。 – JackChance