none
電子署名のタイムスタンプ(署名時刻)の取得方法 RRS feed

  • 質問

  • お世話になります。

     

    現在PowerShellでファイルに施された電子署名の情報を一覧表示するスクリプトを

    作成しているのですが、タイムスタンプ(署名時刻)の取得方法が分かりません。

     

    Get-AuthenticodeSignature コマンドで署名に関する情報は取得できたのです

    が、その電子署名を行った時刻(タイムスタンプ)については取得できないようです。

    ここで言うタイムスタンプとはエクスプローラーで署名されたファイルのプロパティを開

    いた時のデジタル署名タブ、署名の一覧リストに存在するタイムスタンプのことです。

     

    ファイルの署名時刻の取得方法をご存じの方がいらっしゃいましたらアドバイスいただ

    きたいです。

    よろしくお願いいたします。

    2011年7月29日 1:22

回答

  • 少し調べてみましたが、.NET Frameworkには任意のファイルの署名のタイムスタンプを取得する機能がないのかもしれません。

    (.NETアプリが自分自身のマニフェストにつけられた署名のタイムスタンプを取得するにはManifestSignatureInformation.AuthenticodeSignatureで取れるようなのですが)

    アンマネージドなdllを利用するしかないようなので、もしPowerShellでやるなら、C#でP/InvokeしたdllもしくはコードをAdd-Typeで読み込むことになるでしょう。

    その参考例っぽいのを探してきましたが、タイムスタンプの値を取得する部分はtodoとなっていてこのままでは動きません。

    c# - Get timestamp from Authenticode Signed files in .NET - Stack Overflow
    http://stackoverflow.com/questions/3281057/get-timestamp-from-authenticode-signed-files-in-net

    あまり参考にはならないかもですが…


    • 回答としてマーク 星 睦美 2011年8月2日 5:00
    • 回答としてマークされていない Askie 2011年8月3日 8:13
    • 回答の候補に設定 星 睦美 2011年8月4日 1:53
    • 回答の候補の設定解除 星 睦美 2011年8月4日 1:54
    • 回答としてマーク Askie 2011年8月22日 2:13
    2011年7月30日 21:13
    モデレータ

すべての返信

  • 少し調べてみましたが、.NET Frameworkには任意のファイルの署名のタイムスタンプを取得する機能がないのかもしれません。

    (.NETアプリが自分自身のマニフェストにつけられた署名のタイムスタンプを取得するにはManifestSignatureInformation.AuthenticodeSignatureで取れるようなのですが)

    アンマネージドなdllを利用するしかないようなので、もしPowerShellでやるなら、C#でP/InvokeしたdllもしくはコードをAdd-Typeで読み込むことになるでしょう。

    その参考例っぽいのを探してきましたが、タイムスタンプの値を取得する部分はtodoとなっていてこのままでは動きません。

    c# - Get timestamp from Authenticode Signed files in .NET - Stack Overflow
    http://stackoverflow.com/questions/3281057/get-timestamp-from-authenticode-signed-files-in-net

    あまり参考にはならないかもですが…


    • 回答としてマーク 星 睦美 2011年8月2日 5:00
    • 回答としてマークされていない Askie 2011年8月3日 8:13
    • 回答の候補に設定 星 睦美 2011年8月4日 1:53
    • 回答の候補の設定解除 星 睦美 2011年8月4日 1:54
    • 回答としてマーク Askie 2011年8月22日 2:13
    2011年7月30日 21:13
    モデレータ
  • ありがとうございます。

    DLLを利用するしかないですか・・・

     

    エクスプローラーで表示できているので、Shell.Applicationオブジェクトから引っ張ってこれるかとも思いましたが、

    電子署名関連については見当たりませんでした。

    ご紹介していただいたURLの冒頭にあるようにsigntool.exeを使うのが手っ取り早くて簡単みたいですね。

     

    ただ、エクスプローラーにて普通に取得できている情報が取得できないというのもなんだか腑に落ちない気もします。

    その他なにか情報をお持ちの方がいらっしゃいましたら引き続きアドバイスをお願いいたします。

     


    2011年8月1日 11:07
  • 質問者さんと牟田口さんのおっしゃる通り、証明書の情報はとってこれますが、ファイル側にどうやって証明をされたかはとってこられないようですね。

    signtool.exe、これってスタンプ日とれたでしょうか^^;

    >ただ、エクスプローラーにて普通に取得できている情報が取得できないというのもなんだか腑に落ちない気もします。

    写真や動画を見ていただいたらお分かりの通り、DLLを使っても厄介なことをExplorerはサラっとやってのけているので、あまりExplorereで取得できるから、というのは当たらないように存じます。
    #Explorerで取得できる情報には簡単にスクリプトなどでアクセスできて欲しい、というのは私も同じ思いです。

    2011年8月12日 4:55
  • signtool.exe、これってスタンプ日とれたでしょうか^^;

    私が試した限りではverifyの /v オプションで「The signature is timestamped:」という部分に表示されています。

    写真や動画を見ていただいたらお分かりの通り、DLLを使っても厄介なことをExplorerはサラっとやってのけているので、あまりExplorereで取得できるから、というのは当たらないように存じます。
    #Explorerで取得できる情報には簡単にスクリプトなどでアクセスできて欲しい、というのは私も同じ思いです。

    まさにその通りで、Explorerが簡単に見せてくれるだけにその情報にはアクセスできるんじゃないかなーと勝手に期待していました。

    需要が少ないから用意していないものだと納得しておきます。

    ありがとうございました。

    2011年8月22日 2:12