VB.NET Requires Chilkat v11.7.0+
VB.NET
Replace the Authenticode Signature of an Already Signed File
See more Code Signing Examples
Demonstrates how to sign a file that already has an Authenticode signature, for example to sign it with a renewed code signing certificate. Starting in Chilkat v11.7.0, AddSignature removes the existing signature and replaces it with the new one. Before v11.7.0, signing an already signed EXE or DLL added a second signature entry instead.Chilkat VB.NET Downloads
Dim success As Boolean = 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, AddSignature replaces the signature of a file that is already signed.
' (Before v11.7.0, signing an already signed EXE or DLL added a second signature entry
' instead of replacing the first.)
'
' This applies to every supported file type: EXE, DLL, MSI, PowerShell, and VBScript.
Dim path As String = "C:/someDir/MyApp.exe"
Dim codeSign As New Chilkat.CodeSign
Dim sigInfo As New Chilkat.JsonObject
Dim signerCert As New Chilkat.Cert
' Find out who signed the file.
Dim valid As Boolean = codeSign.VerifySignature(path,sigInfo)
If (valid = True) Then
codeSign.GetSignerCert(signerCert)
Debug.WriteLine("currently signed by: " & signerCert.SubjectCN)
Debug.WriteLine("certificate valid until: " & signerCert.ValidToStr)
Else
Debug.WriteLine("The file is not signed, or its signature is not valid.")
End If
' Load the certificate to sign with. It must have access to its private key.
Dim cert As New Chilkat.Cert
success = cert.LoadPfxFile("C:/someDir/myNewCodeSigningCert.pfx","pfx password")
If (success = False) Then
Debug.WriteLine(cert.LastErrorText)
Exit Sub
End If
' Sign with SHA256, and ask a timestamp authority for a timestamp. A timestamp lets the
' signature continue to validate after the code signing certificate has expired.
'
' {
' "hashAlg": "sha256",
' "timestampToken": {
' "enabled": true,
' "tsaUrl": "http://timestamp.digicert.com",
' "requestTsaCert": true,
' "hashAlg": "sha256"
' }
' }
Dim json As New Chilkat.JsonObject
json.UpdateString("hashAlg","sha256")
json.UpdateBool("timestampToken.enabled",True)
json.UpdateString("timestampToken.tsaUrl","http://timestamp.digicert.com")
json.UpdateBool("timestampToken.requestTsaCert",True)
json.UpdateString("timestampToken.hashAlg","sha256")
' Sign the file. It is not necessary to call RemoveSignature first:
' the existing signature is removed and the new signature takes its place.
success = codeSign.AddSignature(path,cert,json)
If (success = False) Then
Debug.WriteLine(codeSign.LastErrorText)
Exit Sub
End If
' The file now has one signature, made with the new certificate.
valid = codeSign.VerifySignature(path,sigInfo)
If (valid = False) Then
Debug.WriteLine(codeSign.LastErrorText)
Exit Sub
End If
success = codeSign.GetSignerCert(signerCert)
If (success = False) Then
Debug.WriteLine(codeSign.LastErrorText)
Exit Sub
End If
Debug.WriteLine("now signed by: " & signerCert.SubjectCN)
Debug.WriteLine("certificate valid until: " & signerCert.ValidToStr)