[Tips]自己署名証明書を作成するには?

by HIRO 13. 11月 2009 17:04

スクリプトに署名したいけれど、証明書を取得するのにお金をかけたくない場合は自己署名証明を作成することで解決できます。

自分に対する覚え書きという意味合いも込めて、その方法を公開いたします。

下記順番で説明します


自己署名証明書作成ツール

自己署名証明書を作成するには makecert.exe というツールを使用します。

このツールは、Visual Studio.NETをお持ちの方であれば、すでにインストールされています。

もしVisual Studio.NETを持っていないのであれば、無償のSDKをインストールすることで手に入れることができます。
(というかできるはずです。というのも自分はVisual Studioを有しており無償のSDKによる確認は行っていないからです)

今回はVisual Studio 2008 コマンドプロンプトを使用して、makecert.exeを実行する手順を紹介します。

なおOSはXPを使用しましたがVistaやWindows7でも同様の手順でいけると思います。(これもまた未確認です。すみません)


ローカル証明機関の作成方法

まずは、[スタート]-[すべてのプログラム]-[Microsoft Visual Studio 2008]-[Visual Studio Tools]-[Visual Studio 2008 コマンドプロンプト]を起動します。

そして、次のコマンドを入力します。

makecert -n "CN=PowerShell Local Certificate Root" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine

上記のコマンドを実行すると数のようにパスワードの入力を求められますが、空のままで OKを押します。

image

すると、「パスワードで保護されません。よろしいですか?」と聞かれるので、ここでは「いいえ」を選択します。

image

コマンドの実行が成功すると「Succeeded」と表示されます。

image

 

再度証明機関を作成し直したい場合の手順も記しておきます。

先ほどのコマンドを実行すると makecert を実行したディレクトリに root.pvk と root.cer という2つのファイルが作成されます。

この2つを削除すれば、最初からやり直すことが可能です。


署名証明書の作成方法

自己署名機関が作成されたので、次は自分宛に署名証明書を発行する必要があります。

これには、Visual Studio 2008 コマンドプロンプトで、次のように入力して実行します。

makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

コマンドの実行が成功すると、こちらも「Succeeded」と表示されます。

image

ここまで成功したら、PowerShellを起動して、次のコマンドを実行してみましょう。

PS> dir cert:\CurrentUser\My

証明書が作成されていれば、次の図のようにサムプリントが表示されます。

image


スクリプトへの署名方法

スクリプトに署名するには、証明書オブジェクトを取得する必要があります。

これにはPowerShell上で次のようにコマンドを入力します。[0]というのは証明書が1つしかない場合です。複数ある場合は必要な証明書を示す番号に変更します。

PS> $cert = @(dir cert:\CurrentUser\My -CodeSigningCert)[0]

この時点で、取得した証明書オブジェクトは$cert変数に入っています。

最後に、この証明書オブジェクトを使用して、スクリプトに署名します。

PS> Set-AuthenticodeSignature SampleScript.ps1 $cert

おまけ:スクリプトへの署名する関数

スクリプトに署名するために、毎回先ほどのようなコードを入力するのは面倒なので、関数としてまとめました。このコードは以前、[Tips]任意のファイルにデジタル署名するで紹介したものです。

#===============================================================================
# Set-Cert: 指定したファイルにデジタル署名を行う
#
# 使用例:
#   PS > Set-Cert ./Test.ps1
#
# copyright PowerShell from Japan!!(http://powershell.hiros-dot.net/)
#
#===============================================================================
function global:Set-Cert([string]$path)
{
    try
    {
        $cert = Get-ChildItem cert:\CurrentUser\My -CodeSigningCert | ?{$_.Subject -match "PowerShell User"}
        Set-AuthenticodeSignature -FilePath $path -cert $cert
        "デジタル署名に成功しました"
    }
    catch [Exception]
    {
        "デジタル署名に失敗しました"
    }
}

使用方法は次の通りです。

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

*この関数は PowerShell User という名前の証明書がある前提で作成しています。

現在のレート 5.0 (2人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell | PowerShell 2.0 | Tips

Hey, Scripting Guy まとめ その3

by HIRO 4. 11月 2009 10:56

Hey, Scripting Guy! の記事をまとめました。

 

Windows PowerShell 2.0 を使用してタブ区切り形式のファイルを並べ替える方法はありますか 2009/08/20 木
Windows PowerShell スクリプトの処理速度を上げる方法はありますか 2009/07/22 水
Windows PowerShell でのループ処理の詳細 2009/04/30 木
Windows PowerShell で Do ~ While ループを使用する方法はありますか 2009/04/29 水、英語
Windows PowerShell で VBScript の While ~ Wend ループに相当するものを使用する方法はありますか 2009/04/28 火、英語
Windows PowerShell を使用してディレクトリ、ファイル、およびフォルダを検索する方法はありますか 2009/04/23 木、英語
Windows PowerShell とパイプライン 2009/04/21 火、英語
Windows PowerShell の概要 2009/04/20 月、英語
Windows PowerShell で Active Directory を検索して行方不明のグループの一覧を表示する方法はありますか 2009/03/18 水
Windows PowerShell から Active Directory を検索する方法はありますか 2009/03/17 火
VBScript の WMI クエリを Windows PowerShell に移行する方法はありますか 2009/03/04 水
Windows PowerShell を使用して Office Access データベースを作成する方法はありますか 2009/02/16 月
Windows PowerShell を使用して、Office Outlook の迷惑メールを処理する方法はありますか 2009/01/26 月、英語
使用中の Windows PowerShell のバージョンを確認する方法はありますか 2009/01/05 月
Windows PowerShell を使用してローカル ユーザー アカウントが存在するかどうかを確認する方法はありますか 2008/05/22 木
Windows PowerShell を使用して一連のファイルで使用されている一意なファイル拡張子を抽出する方法はあり ますか 2008/05/09 金
Windows PowerShell を使用して特定の文字列値を含むファイルの名前と作成日時を返す方法はありますか 2008/05/08 木
Windows PowerShell を使用してファイルの所有者を特定する方法はありますか 2008/04/15 火
Windows PowerShell を使用してフォルダー内のすべての Microsoft Office ドキュメントを確認する方法はありますか 2008/04/11 金
Windows PowerShell を使用してローカル グループにドメイン ユーザーを追加する方法はありますか 2008/03/11 火
Windows PowerShell を使用して GUID を作成する方法はありますか 2008/02/27 水
Windows PowerShell で切断されたレコードセットを使用する方法はありますか 2008/02/15 金
Windows PowerShell を使用して CSV ファイルのデータを並べ替える方法はありますか 2008/02/12 火
Windows PowerShell を使用して一覧から一意ではない項目を取得する方法はありますか 2008/01/31 木
Windows PowerShell を使用してテキスト ファイルの文字を置き換える方法はありますか 2008/01/17 木
Windows PowerShell を使用してデータベースにレコードを追加する方法はありますか 2008/01/15 火
Windows PowerShell を使用して作成されてから 90 日以上経過したすべてのファイルをフォルダから削除する方法はありますか 2007/10/31 水
Windows PowerShell を使用して環境変数と特別なフォルダのパスを取得する方法はありますか 2007/07/12 木
Windows PowerShell を使用してアプリケーションの終了時に通知する方法はありますか 2007/03/26 月
Windows PowerShell を使用してコンピュータ上で開いているすべてのウィンドウの一覧を取得する方法はありますか 2007/02/02 金
Windows PowerShell コンソールの幅を広げる方法はありますか 2006/12/04 月
Windows PowerShell スクリプトに関数を追加する方法はありますか 2006/11/21 火
Windows PowerShell を使用してすべてのコンピュータのリストを取得する方法はありますか 2006/11/09 木
Windows PowerShell を使用してドライブ上のすべての .TMP ファイルを削除する方法はありますか 2006/10/23 月
Windows PowerShell スクリプトを [ファイル名を指定して実行] ダイアログ ボックスやショートカットから実行する方法はありますか 2006/09/26 火
Windows PowerShell を使用して Microsoft Excel を自動化する方法はありますか 2006/09/08 金
Windows PowerShell を使用してコンピュータ上のすべての .WMA ファイルを見つける方法はありますか 2006/08/30 水
Windows PowerShell を使用して Guest アカウントの状態を確認する方法はありますか 2006/08/23 水
Windows PowerShell を使用して Active Directory ユーザー アカウントにバインドする方法はありますか 2006/06/29 木
Windows PowerShell を使用してリモート コンピュータ上のサービスを起動する方法はありますか 2006/06/21 水

現在のレート 5.0 (2人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell | PowerShell 2.0 | Tips | Hey, Scripting Guy!

[Tips]DotNetZipライブラリを使用して、Zipファイルを解凍する

by HIRO 22. 10月 2009 12:33

これまでに下記の記事でZipファイルを作成する方法を紹介しました。

今回は、Zipファイルを解凍する関数を作ってみたので紹介します。

 

[void][System.Reflection.Assembly]::LoadFrom("c:\work\Ionic.Zip.dll")

function Unpack-Zip([string]$TargetFile, [string]$TargetDir)
{
    $zipfile =  new-object Ionic.Zip.ZipFile
    #解凍するファイルの読み込み
    $zip = [Ionic.Zip.ZipFile]::Read($TargetFile)
    if ($TargetDir.Length -eq 0)
    {
        $TargetDir = Split-Path $TargetFile -Parent
    }
    $zip | %{$_.Extract($TargetDir, [Ionic.Zip.ExtractExistingFileAction]::OverWriteSilently)}
    Write-Host "解凍が完了しました!!"
}

Ionic.Zip.dllの使用方法については、過去記事を参照ください。

ZipファイルはExtractメソッドで行っています。

Extractメソッドの引数にOverWriteSilentlyを渡しているので、ファイルが既存する場合には上書きされます。

 

この関数の書式は

Unpack-Zip 解凍するファイルのパス [解凍先ディレクトリ]

です。

解凍先ディレクトリは省略することができ、省略した場合はZipファイルがあるディレクトリに解凍されます。

現在のレート 5.0 (1人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

DotNetZip | PowerShell | Tips

[Tips]今何歳?

by HIRO 20. 10月 2009 17:57

今何歳かを求める関数を作ってみました。(ネタ元はこちら

誕生日に関する計算はいろいろとあるようですが、「誕生日の前日をもって年齢を+1する」という条件で計算しています。

function Get-Age([DateTime]$Birthday, [DateTime]$Today = [DateTime]::Now)
{
    #数え年を計算
    $Year = $Today.Year - $Birthday.Year    
    #今年の誕生日を計算(誕生日の前日を求める)
    $ThisBirthday = $Birthday.AddYears($Year).AddDays(-1)
    #今日が誕生日の前日より前なら数え年から1引く
    if ($Today -lt $ThisBirthday )
    {
        $Year-=1
    }
    return $Year
}

最初にこの関数の使い方ですが

Get-Age "誕生日(YYYY/M/D)" ["基準日(YYYY/M/D)"]

のようにします。

たとえば

Get-Age "1972/6/19" "2009/10/20"

のように。

ここでいう基準日は、○月X日時点で何歳かを調べるための日付を意味します。

基準日は省略することができ、省略した場合は"今日"を指定したことになります。

さて、コードですが最初に誕生日から基準日までの数え年を計算します。

次に基準日の年の、誕生日を求めます。「誕生日の前日をもって年齢を+1する」という条件に基づき、AddDaysメソッドで-1しています。

そして、基準日が誕生日($ThisBirthday)よりも前なら、まだ誕生日が来ていないことになるので、数え年から1を引きます。

そうでない場合は、数え年が年齢となります。

現在のレート 5.0 (1人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell | Tips

[Tips]XmlElementを取得する

by HIRO 20. 10月 2009 16:08

XMLの要素を取得する関数、GetElementNameを作ってみました。(元ネタはこちら

function Get-Elementname([Xml.XmlElement]$element)
{
    for ( $i = 0; $i -lt $element.get_ChildNodes().Count; $i++ )
    {
        $element.get_ChildNodes().Item($i).Name
    }
}

たとえば、下記のようにしてCNNのRSSを読み込み

PS>$xml = [xml](New-Object System.Net.WebClient).DownloadString('http://rss.cnn.com/rss/cnn_topstories.rssl')

$xml.rss.channelの下の要素にどのようなものがあるかを調べるには、下記のようにします。

PS> Get-Elementname $xml.rss.channel

 

この関数は、get_ChildNodes().Item(要素番号).Name で要素名を取得出来ることを利用しています。

現在のレート 5.0 (1人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell | Tips

Calendar

<<  3月 2010  >>
月曜火曜水曜木曜金曜土曜日曜
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010 PowerShell from Japan!!