Ruby Requires Chilkat v11.7.0+
Ruby
Verify the Authenticode Signature of an MSI, PowerShell, or VBScript File
See more Code Signing Examples
Demonstrates how to verify the Authenticode signature of a Windows Installer package (.msi), a PowerShell file (.ps1, .psm1, .psd1), or a VBScript file (.vbs), and how to get the certificate of the signer. Verifying these file types requires Chilkat v11.7.0 or later.Chilkat Ruby Downloads
require 'chilkat'
success = false
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
# Starting in Chilkat v11.7.0, VerifySignature can verify the Authenticode signature of
# - Windows Installer packages (.msi)
# - PowerShell scripts, modules, and data files (.ps1, .psm1, .psd1)
# - VBScript files (.vbs)
# in addition to EXE and DLL files.
# This example verifies a signed PowerShell script.
# To verify an .msi or a .vbs, pass the path of that file instead.
path = "C:/someDir/Deploy.ps1"
codeSign = Chilkat::CkCodeSign.new()
sigInfo = Chilkat::CkJsonObject.new()
# VerifySignature returns true if the file has a valid Authenticode signature.
# It returns false if the file is not signed, if the file was changed after it was signed,
# or if the signing certificate is not trusted.
valid = codeSign.VerifySignature(path,sigInfo)
if (valid == false)
# The LastErrorText explains why the verification failed.
print codeSign.lastErrorText() + "\n";
exit
end
print "The Authenticode signature is valid." + "\n";
# The details of the signature are returned in the JSON, in the same layout as for an EXE or DLL.
# See Verify Authenticode Signature of EXE or DLL for a sample of the JSON and code that parses it.
print "signing algorithm: " + sigInfo.stringOf("pkcs7.verify.signerInfo[0].signingAlgName") + "\n";
print "hash algorithm: " + sigInfo.stringOf("pkcs7.verify.signerInfo[0].cert.digestAlgName") + "\n";
# Get the certificate of the signer.
# The signer certificate is available only after a call to VerifySignature that returned true.
# It is the public certificate only. It does not include the signer's private key.
signerCert = Chilkat::CkCert.new()
success = codeSign.GetSignerCert(signerCert)
if (success == false)
print codeSign.lastErrorText() + "\n";
exit
end
print "signed by: " + signerCert.subjectCN() + "\n";
print "certificate issued by: " + signerCert.issuerCN() + "\n";
print "certificate serial number: " + signerCert.serialNumber() + "\n";
print "certificate valid until: " + signerCert.validToStr() + "\n";