スクリプト署名
まず、自己認証局をつくり、そこからスクリプト署名用の証明書を発行する。
.NET SDK > makecert -n "CN=自己認証局の証明書" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -ss Root -sv root.pvk root.cer (rsaキーのパスフレーズをきかれるので、入力する) .NET SDK > makecert -n "CN=自己認証局から発行された証明書" -pe -a sha1 -eku 1.3.6.1.5.5.7.3.3 -ss My -iv root.pvk -ic root.cer (認証局のrsaキーのパスフレーズをきかれるので、入力する)
自己認証局からこれ以上証明書を発行する必要がなければ、
root.pvkとroot.cerは削除する。(もう証明書を発行することはできなくなる。)
オプション説明
- n 証明書のDN
- a ハッシュ関数のアルゴリズム
- eku (Extended Key Usage) 拡張 キー使用法 をOID(Object ID)で指定する。 1.3.6.1.5.5.7.3.3 はコード署名
- r 自己署名
- ss Subjectの証明書の保存先ストア
- sv Subjectの rsa 秘密鍵ファイル(PVKファイル)
- pe rsa 秘密鍵を証明書と一緒にCSPコンテナに入れる (Possible Export)
- iv Issuerの rsa 秘密鍵ファイル(PVKファイル)
- ic Issuerの証明書(CERファイル)
証明書ストア
Root (ルート認証局)
CA (中間認証局)
My (個人)
TrustedPublisher (信頼された発行元)
Disallowed (信頼されない発行元)
次に、certmgrを使って、スクリプト署名用の証明書をエクスポート/インポートする。
なぜこんなことをするかというと、[秘密キーの保護を強力にする] 機能を使って、
秘密鍵で署名を行う度に、ダイアログで確認するように設定するため。
詳細は get-help about_signing
あとは、set-authenticodesignature でスクリプトファイルに署名を行う。
PS > cd cert: PS > cd CurrentUser\My PS > $cert = ls (発行した証明書を$certに) PS > Set-AuthenticodeSignature $profile $cert
PS > Set-ExecutionPolicy AllSigned
スクリプトを実行するときに、実行してよいかきかれたら、
[常に実行する]を選択すると、スクリプト署名用の証明書が、
TrustedPublisher に登録される。