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

AD CS でコード証明書を発行する


AD CS での操作

ドメインメンバーPCでの操作

PowerShell への署名

PowerShellのスクリプト実行ポリシーの変更

(MVP が伝授するスクリプト作成のヒントとコツにも紹介されました)

最近 PowerShell を書き始めたので、署名をしたいなぁ... と思って AD CS からコード証明書を発行させるようにしました。ドメイン環境であれば AD CS からコード署名証明書を発行できます。(スタンドアローン AD CS ではコード証明の発行はできません)

 

AD CS での操作

これを書いた後に気が付いたので、先に補足しておきます。

デフォルトでは、コード証明書の要求権限が Domain Users に無いのと、証明書の有効期限が1年です。Default を変更するには、AD CS の「証明書テンプレート」で「コード証明書」をコピーし、カスタムテンプレートを作成する必要があります。(時間が出来た時に出もキャプチャー撮ります ^^;)

 

AD CS でコード署名のテンプレートを追加します

AD CS で発行する証明書テンプレートの追加

 

コード署名を指定

 

コード署名が発行できるようになった

 

ドメインメンバーPCでの操作

クライアントからは MMC でコード署名証明書を要求します

MMCにスナップインを追加

 

証明書を追加

 

ユーザアカウント

 

証明書を要求

 

AD登録ポリシー

 

コード署名を要求

 

コード署名がセットされた

 

PowerShell への署名

あれ? UnknownError になるし.... 署名方法何か間違っているのかなぁ.... .NET Framework 2.0 SDK の makecert.exe を使っても同じエラーになるし....

署名に失敗する

PS F:\vhd> $cert=@(Get-ChildItem -Path cert:\CurrentUser\my -CodeSigningCert)
PS F:\vhd> $cert


ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\my


Thumbprint                                                             Subject
----------                                                            -------
1F7164BC9F1E94D0D6EC4E54B78C86F2E1F80A98       CN=mura, CN=Users, DC=vwnet, DC=jp


PS F:\vhd> Set-AuthenticodeSignature -Filepath .\vhdboot.ps1 -Cert $cert[0]


ディレクトリ: F:\vhd


SignerCertificate         Status                  Path
-----------------    ------                  ----
                               UnknownError         vhdboot.ps1


PS F:\vhd>

 

色々調べたら、スクリプトファイルに署名する場合は、文字コードが UTF-8 になっていなきゃならないって情報にたどり着きました。文字コードを UTF-8 に変更して無事署名完了 ^^v

文字コードを UTF-8 にしたら署名成功

PS F:\vhd> $cert=@(Get-ChildItem -Path cert:\CurrentUser\my -CodeSigningCert)
PS F:\vhd> $cert


ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\my


Thumbprint                                                            Subject
----------                                                           -------
1F7164BC9F1E94D0D6EC4E54B78C86F2E1F80A98     CN=mura, CN=Users, DC=vwnet, DC=jp


PS F:\vhd> Set-AuthenticodeSignature -Filepath .\vhdboot.ps1 -Cert $cert[0]


ディレクトリ: F:\vhd


SignerCertificate                                                  Status               Path
-----------------                                              ------              ----
1F7164BC9F1E94D0D6EC4E54B78C86F2E1F80A98    Valid                 vhdboot.ps1

 

PowerShellのスクリプト実行ポリシーの変更

おまけです。

PowerShell はデフォルトでスクリプト実行が禁止(Restricted)になっています。スクリプト実行モードを確認するには「Get-ExecutionPolicy」を使用します。
スクリプトを実行可能にするには、「Set-ExecutionPolicy」でモードを変更します。モード変更をする場合は、PowerShell を管理者として実行で起動します。

Restricted スクリプトの実行を許可しない(default)
AllSigned 署名必須(業務で使うのならこれかな)
RemoteSigned インターネットからダウンロードしたスクリプトには署名が必要
Unrestricted 署名がなくても実行(ダウンロードスクリプトは実行許可が求められる)
Bypass ブロックも警告もされない(セキュリティ的に危険なので推奨しない)
Undefined 実行ポリシーの削除(GPO設定は削除されない)

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.