Можно ли подписывать файлы JScript (.js) или VBScript (.vbs) цифровой подписью?

Я знаю, что исполняемый файл Windows binary можно подписать с помощью инструмент подписи. Так что все это время я предполагал, что нельзя подписать ни один из файлов, интерпретируемых Windows Script Host, таких как JScript (.js) или VBScript (.vbs), потому что это просто текстовые файлы.

Но сегодня, когда я открывал файл .js, который я скачал с моего веб-сайта, меня приветствовало это предупреждение:

введите описание изображения здесь

Значит ли это, что есть способ подписать эти файлы .js/.vbs? Если да, то как?


person c00000fd    schedule 12.12.2015    source источник


Ответы (2)


Просто чтобы завершить мой первоначальный вопрос. Ответ: да. Насколько мне известно, следующие файлы можно подписать с помощью Microsoft SignTool:

  • Очевидно, исполняемые файлы Windows: .exe, .dll, .com (для старого формата DOS), .scr (для заставки), .ocx (для элемента управления ActiveX), .cpl (для исполняемого файла панели управления).

  • Файлы установщика Windows: .msi, .msp

  • Текстовые скрипты: .js (для JScript), .vbs (для VBScript), .jse (для кодированного JScript), .vbe (для кодированного VBScript)

  • Скрипты PowerShell: .ps1 , .psm1, .ps1xml

  • Файлы сценариев Windows: .wsf (со смешанным содержимым)

person c00000fd    schedule 24.12.2015
comment
Вы можете добавить .wsf (файл сценария Windows) в список. - person Emmanuel Bourg; 17.12.2019
comment
Можете ли вы подписывать файлы HTA? Возник вопрос - Можно ли добавить цифровую подпись в файл hta?. - person user692942; 14.01.2021

Scripting.Signer Object может подписывать скрипт с цифровой подписью.

Dim filespec : Set filespec = "my_script.vbs"
Dim cert : Set cert = "my" ' the default private certificate
Dim oSign : Set oSign = CreateObject("Scripting.Signer")
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim file : Set file = fso.GetFile(filespec)

oSign.SignFile file.Path, cert
person Jacob Krall    schedule 12.12.2015
comment
Хм. Это интересно... за исключением того, что я не могу заставить его работать. Я заменил cert в вашем примере на имя, которое я получаю для своего сертификата подписи кода, который я использую для подписи файлов .exe. Чтобы получить это имя, я запускаю certmgr.msc, нахожу сертификат в Truster Publishers->Certificates и получаю его из столбца Issued To. Но в этом случае метод SignFile возвращает Error: Cannot find the certificate and private key to use for decryption. и Code: 8009200C. Есть идеи, почему? - person c00000fd; 13.12.2015
comment
О, только что понял, что signtool может подписывать и следующие файлы скриптов: .vbs, .vbe, .js, .jse, .wsf добавляя подпись в комментариях в конце. Так что нет необходимости заниматься мастурбацией VB: msdn .microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx Было бы полезно, если бы эта страница MSDN упомянула об этом... - person c00000fd; 13.12.2015
comment
Хм… Возможно, вам также потребуется передать store в третьей позиции процедуры SignFile? Я думаю, что signtool и Scripting.Signer в любом случае могут под прикрытием вызывать один и тот же Windows API. - person Jacob Krall; 13.12.2015