[Tips]任意のファイルにデジタル署名する

デジタル証明書は自分で発行を行うことが可能です。

PowerShellでデジタル証明書を作成し、任意のファイルにデジタル署名を行う方法について説明します。

PowerShellには証明書ドライブ(cert:)があるのでこれを利用します。

証明書の取得は下記のようにして行います。

$cert = Get-ChildItem cert:\CurrentUser\My 窶鼎odeSign |     
?{$_.Subject 窶杜atch “PowerShellUser}

これで証明書は$cert変数へ代入されます。

次に、任意のファイルにデジタル署名を行うわけですが、これにはSet-AuthenticodeSignature コマンドレットを使用します。

Set-AuthenticodeSignature 窶擢ilePath “デジタル署名を行うファイル” 窶田ert $cert

これだけで任意のファイルへデジタル署名を行うことができます。

しかし、毎回入力するのは面倒なので、下記のように関数にしてみました。ついでに、先日紹介したtry-catchも使ってみました。

function global:Set-Cert([string]$path)
{
try
{
$cert = dir cert:\CurrentUser\My -codesign |
? { $_.Subject -match "PowerShell User" }
Set-AuthenticodeSignature -FilePath $path -cert $cert
"デジタル署名に成功しました"
}
catch [Exception]
{
"デジタル署名に失敗しました"
}
}

使い方は

PS > Set-Cert "デジタル署名するファイルのパス"

です。是非おためしください。

追記:2009/04/15

dormouseさんからご指摘いただいた箇所を修正しました。まさにその通りでした。

もう一台のPCからの転記ミスでした。失礼しました。

参考文献:

コメント

  1. dormouse より:

    いろんなことができるようになったPowerShellにはとても関心を寄せています.
    このやり方だと確かに,毎回証明書を取得する必要がなくて便利ですね.

    試してみて気づいたのですが,投稿された内容そのままだとエラーが発生します.
    揚げ足取りみたいになってしまって恐縮なのですが,気づいた点を.

    * functionがfu"cn"tionになっている
    * 型指定している箇所の最後の"]"がいらないのではないか
    * 証明書を適用する箇所はFilePathではなく"-filepath"ではないか

タイトルとURLをコピーしました