2016-12-14 8 views
1

PowerShell Set-AuthenticodeSignatureでjsファイルに署名できました。私はは、Get-AuthenticodeSignatureにを使用して署名を検証することができC#でJavascriptのauthenticodeを検証する方法

// SIG // Begin signature block 
// SIG // MIIKgAYJKoZIhvcNAQcCoIIKcTCCCm0CAQExCzAJBgUr 
// SIG // .... 
// SIG // End signature block 

:私は署名を見ることができる後 は次の形式でファイルに登場しました。それはsigが有効だと言いますが、C#コードでシグネチャを検証する方法はありません。 これらのオプションのすべてが失敗しました:WinVerifyTrustのPowerShellからは、Get-AuthenticodeSignatureにの

  • Wintrust.dll
  • から移植された部分に使用され

    1. X509Certificate.CreateFromSignedFile
    2. X509Certificate object c# performance and memory issues alternative – fixed
    3. を!

    jsシグネチャを検証するための特定のapiがありますか?

    答えて

    1

    WinVerifyTrustは、WTD_CHOICE_BLOBフラグを使用して、実行可能ファイル以外のファイルの検証をサポートしています。正しいsubject interface package(SIP)をWINTRUST_BLOB_INFO構造体に指定してください。 Get-AuthenticodeSignatureコマンドは、PowerShell SIP {603bcc1f-4b59-4e08-b724-d2c6297ef351}を使用して署名を検証します。私はSet-AuthenticodeSignatureが同じSIPを使ってスクリプトに署名すると仮定します。

    +0

    ありがとうございます。 WTD_CHOICE_BLOBが使用されていることを確認しましたが、検証後に0x800b0100(署名なし)が返されます。しかし署名はそこにあります。ここでは、BLOBはhttps://github.com/PowerShell/PowerShell/blob/309bf603f9aff9009dce7e725d42b2d4f99f58c9/src/System.Management.Automation/security/Authenticode.cs#L529で初期化されています。 FileはFile.ReadAllTextでメモリにロードされます。 –

    +0

    さらに詳しく見るファイルパスのみを提供しましたか(WINTRUST_FILE_INFOが代わりに使用されています) – erikvdv1

    +0

    申し訳ありませんが、あまりにも速く入力してください... [Get-AuthenticodeSignature](https://github.com/ PowerShell/PowerShell/blob/309bf603f9aff9009dce7e725d42b2d4f99f58c9/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs#L281)はfileContent == nullを示しているので、代わりにWINTRUST_FILE_INFOが使用されています。それを試しましたか? – erikvdv1

    1

    私は最近、同様の問題に遭遇し、私がこの問題を解決するために何をしたのかを見せてください。私が行く前に、私が今作ろうとする仮定はほとんどありません。私が間違っていれば私を修正してください。 wintrust私は考え出しあなたが コンソールアプリケーション(C#の)

    から "wintrustverify" しようとしている場合があります の.jsまたは.vbsファイル

  • ようなスクリプトファイル以外の他のすべてのケースのために働いている

    1. それはフリースレッドアパートメントモデル(MTA)からそのメソッドが実行されているときにwintrustがうまく動作するため、上記のスクリプトファイルでのみ発生します。 STAスレッド内でラップされると、それは私のために働き始めました。後で私はそれが歴史的な問題であることを知りました.NetアプリケーションからのCOMコンポーネントの相互運用を扱う際には予防措置を講じるべきでした。

      ここにコードスニペットがありますが、verifysignatureをあなたのwintrustコードロジックに置き換えて試すことができます。私はこれが役立つことを願っています

        public static void CheckSignature() 
            { 
             STAApartment apt = new STAApartment(); 
             var result = apt.Invoke(() => 
             { 
              return VerifySignature(@".\signedjsfile.js", false); 
             }); 
             Console.WriteLine(result); 
            } 
      
            private static WinVerifyTrustResult VerifySignature(string filePath, bool verifySignatureOnly) 
            { 
      
             using (var wtd = new WinTrustData(new WinTrustFileInfo(filePath)) 
             { 
              dwUIChoice = WintrustUIChoice.WTD_UI_NONE, 
              dwUIContext = WinTrustDataUIContext.WTD_DATA_UI_EXECUTE, 
              fdwRevocationChecks = WinTrustDataRevocationChecks.WTD_REVOCATION_CHECK_WHOLECHAIN, 
              dwStateAction = WintrustAction.WTD_STATEACTION_IGNORE, 
              dwProvFlags = verifySignatureOnly ? WintrustProviderFlags.WTD_HASH_ONLY_FLAG : WintrustProviderFlags.WTD_REVOCATION_CHECK_CHAIN 
             }) 
             { 
              var result = WinTrust.WinVerifyTrust(
               WinTrust.INVALID_HANDLE_VALUE, new Guid(WinTrust.WINTRUST_ACTION_GENERIC_VERIFY_V2), wtd 
              ); 
              return result; 
             } 
            } 
      
            public class STAApartment 
            { 
             public T Invoke<T>(Func<T> func) 
             { 
              var tcs = new TaskCompletionSource<T>(); 
              Thread thread = new Thread(() => 
              { 
               try 
               { 
                tcs.SetResult(func()); 
               } 
               catch (Exception e) 
               { 
                tcs.SetException(e); 
               } 
              }); 
              thread.SetApartmentState(ApartmentState.STA); 
              thread.Start();     
              return tcs.Task.Result; 
             } 
            } 
      
  • 関連する問題