Sample code for 30+ languages & platforms
VB.NET Requires Chilkat v11.7.0+

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

VB.NET
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)