Code Signing with Azure

I’m not sure how much I can put here. I used ChatGPT to walk me through creating an account with Azure and creating a certificate for code signing. Then I had it summarize. Here are the results, hope it helps someone. If you’re going to use this, I would skim through it first.

The three biggest gotchas

If I were handing this to another SetupBuilder developer, I’d emphasize three things above everything else.

First: create an individual business-domain email before starting. Use firstname@companydomain.com, not support@, sales@, admin@, Gmail, etc. The primary mailbox is involved in multiple verification stages.

Second: make your government business record, Azure application and website agree. Organization name, address and domain discrepancies are exactly the sort of thing that turns a straightforward automated validation into an additional-document request.

Third: Azure CLI authentication is part of the signing setup. Having the JSON, SignTool and an Active certificate profile isn’t sufficient by itself. The build machine still needs an authenticated Azure identity with the Artifact Signing Certificate Profile Signer role. Microsoft documents the SignTool integration and authentication requirements here: Microsoft Artifact Signing integration documentation. (Microsoft Learn)

Microsoft’s full current setup documentation is here: Artifact Signing setup quickstart. Since Microsoft has already renamed Trusted Signing → Artifact Signing and continues updating the onboarding process, I’d treat Microsoft’s documentation as authoritative if the Azure screens differ from this walkthrough. (Microsoft Learn) Absolutely.

Below is a generic write-up aimed specifically at SetupBuilder 2025 developers moving to Microsoft Azure Artifact Signing. I’ve removed your company/product/account-specific information and incorporated the lessons from the problems we encountered. I also checked the current Microsoft documentation because this process has changed substantially. Microsoft now calls the service Artifact Signing; older SetupBuilder material may call it Trusted Signing. (Microsoft Learn)

Setting Up Microsoft Azure Artifact Signing with SetupBuilder 2025

Overview

Microsoft Azure Artifact Signing is Microsoft’s cloud-based code-signing service. It replaces the traditional arrangement where a developer obtains a code-signing certificate from a CA such as Sectigo and keeps the certificate in a PFX file or hardware token.

With Artifact Signing, Microsoft manages the signing certificate and private key. SetupBuilder uses Microsoft’s SignTool and Artifact Signing client to request signatures from Azure. Microsoft describes the service as digest-based signing, so the file itself does not need to be uploaded to Microsoft. (Microsoft Learn)

The overall process is:

Azure subscription → Artifact Signing account → Organization identity validation → Public Trust certificate profile → SetupBuilder 2025 → Azure CLI authentication → signed EXEs/DLLs/installers

There are several places where the setup is not obvious. In particular, prepare the correct individual business email address before starting identity validation.


1. Prepare Your Business Information First

Before creating the identity-validation request, make sure the public information about your business is accurate.

Microsoft recommends that public business records be current before beginning organization validation. The information entered in Azure needs to be supportable with business documentation. (Microsoft Learn)

Have the following ready:

  • Exact organization/business name you want on the code-signing certificate.

  • Current business address.

  • Business website.

  • Business identifier, such as Tax ID/EIN, registered business number, or D-U-N-S number, as appropriate.

  • Government business-registration documentation.

  • Access to the business website so you can update it if necessary.

  • An individual person’s email address on the business domain.

The email address is important

Create an individual business email before beginning, for example:

john@mysoftwarecompany.com

or:

john.smith@mysoftwarecompany.com

Do not plan on using a role address such as:

support@mysoftwarecompany.com
sales@mysoftwarecompany.com
admin@mysoftwarecompany.com
info@mysoftwarecompany.com

A role/distribution address can cause email validation trouble. Likewise, don’t use a personal consumer address such as Gmail or Hotmail for business validation.

The individual address should be on the organization’s domain, belong to the person performing the verification, and be able to receive external email containing links.

Microsoft’s current documentation says the Primary Email is used for Verified Credential and email-verification links, while the Secondary Email may be a distribution list, provided its domain matches the primary email domain. (Microsoft Learn)

So a good arrangement is:

Primary:   john@mysoftwarecompany.com
Secondary: support@mysoftwarecompany.com

Test the primary mailbox from an outside email account before proceeding.


2. Create an Azure Subscription

You need a Microsoft Azure subscription and a Microsoft Entra tenant.

The Microsoft account you use to administer Azure does not necessarily have to have the same name as the company being verified. The Azure login identifies the person administering the Azure resources; the Artifact Signing identity validation establishes the organization whose name appears on the signing certificate.

Microsoft Azure portal

Once the subscription exists, make sure you’re working in the correct Azure directory/tenant and subscription.


3. Register the Artifact Signing Resource Provider

Artifact Signing uses the Azure resource provider:

Microsoft.CodeSigning

In Azure Portal:

Subscriptions → your subscription → Resource providers

Find:

Microsoft.CodeSigning

and make sure its status is Registered.

Microsoft also supports doing this from Azure CLI. (Microsoft Learn)


4. Create the Artifact Signing Account

In Azure Portal, search for:

Artifact Signing Accounts

Create a new account.

You’ll select:

  • Subscription

  • Resource group

  • Artifact Signing account name

  • Region

  • Pricing/SKU

The account name needs to be unique.

Make a note of both the Artifact Signing account name and region. You will need them later when creating the JSON configuration file for SetupBuilder.

Artifact Signing is available only in supported Azure regions. Each region has a corresponding signing endpoint. (Microsoft Learn)

For example, an account created in West US 2 uses an endpoint in the form:

https://wus2.codesigning.azure.net/

Don’t copy that example unless your account is actually in West US 2. The endpoint must match your account’s Azure region.


5. Assign the Necessary Azure Roles

Go into the Artifact Signing account and open:

Access control (IAM) → Add role assignment

The Azure user who is doing the setup should have:

Artifact Signing Identity Verifier

This permits the user to perform/manage identity validation.

Also assign:

Artifact Signing Certificate Profile Signer

This is the role the identity needs later when actually signing files.

Being Owner of the Azure resource isn’t a substitute for these Artifact Signing-specific permissions. Microsoft’s signing integration specifically requires the signer role for the individual or group performing signing. (Microsoft Learn)

If the Azure user appears as a Guest in the tenant, that isn’t automatically a problem. What matters is that the correct Azure identity receives the required role assignments.


6. Create the Organization Identity Validation

Inside the Artifact Signing account go to:

Identity validations → + New identity

For software distributed publicly to customers, choose:

Public

rather than Private.

Public identity validation is what feeds a Public Trust certificate profile. (Microsoft Learn)

For an organization, enter the requested information, including:

Organization Name
Website URL
Primary Email
Secondary Email
Business Identifier
Business Address
First/Last name of representative

Organization name

Use the organization name that you want validated and displayed as the software publisher.

Microsoft supports organization/DBA validation, but the name needs to be supported by your business documentation. (Microsoft Learn)

Primary email

Use the individual business-domain email prepared earlier:

john@mysoftwarecompany.com

Do not casually use support@, sales@, etc. as Primary Email.

Business identifier

Azure may offer choices such as:

D-U-N-S
Tax ID
Registered Business Number

Use whichever identifier legitimately identifies the underlying business entity and is supported by your documentation.

Address

Use the current business address that your documentation can substantiate.

If the business registry shows an old address, consider updating the government record before submitting the Azure identity-validation request.

Microsoft specifically recommends that public records be current and says additional documentation should match the information entered in the validation request. (Microsoft Learn)


7. Personal Identity Verification

After submitting the organization identity validation, its status normally begins as:

In Progress

It may then change to:

Action Required

Microsoft may require the individual representing the organization to complete personal identity verification.

This is not changing the certificate into a personal certificate. Microsoft is verifying that a real person is representing the organization.

The process may involve:

  • Microsoft Authenticator

  • Microsoft Verified ID

  • A trusted identity-verification provider such as AU10TIX

  • Government-issued identification

  • Phone verification

  • Identity/face verification

Microsoft’s current walkthrough describes obtaining a Verified ID through a trusted verifier, adding that Verified ID to Microsoft Authenticator, and then presenting it back to Artifact Signing. (Microsoft Learn)

If Authenticator says:

Required Verified ID not found

you probably need to follow Azure’s link to get verified through a trusted ID verifier first. After the credential has been created and appears in Authenticator, return to the Azure verification process and present it.

A successful browser result should eventually say something similar to:

Verification Successful


8. Be Prepared to Supply Business Documentation

Microsoft may subsequently change the validation to Action Required again and request organization documentation.

This is normal.

For example, Microsoft may request one document establishing the business and another establishing its relationship to the website/domain.

Useful evidence can include:

Government/business evidence:

  • Articles of incorporation

  • Partnership documentation

  • Government registration/certificate

  • Government business-registry record

  • Tax records

  • Lease or tenancy documents

  • Financial institution/utility documents

Website/domain evidence:

  • Domain ownership records

  • Domain purchase/renewal records

  • Website showing the organization name, address, contact information and domain

  • Other documentation connecting the organization with the domain

Microsoft’s current guidance says requested documents can be uploaded through the Azure Portal and that there are only three attempts for additional-document submissions, so check the evidence carefully before submitting it. (Microsoft Learn)

A practical combination

A particularly straightforward combination for a small software company is:

Government document:
Current state/provincial/federal business registration showing the organization’s name and address.

Website document:
A PDF printout of a Contact/About page showing:

Example Software Company
123 Business Street
Somewhere, ST 12345
1-800-555-1234
sales@examplecompany.com

Print the page to PDF with browser headers and footers enabled, so the PDF also visibly contains:

https://www.examplecompany.com/contact/

This creates a clear connection between:

Government registration → company name → address → company website/domain

If you temporarily add information to the website for verification purposes, leave it available until identity validation has completely finished.

Microsoft says identity validation can take 1–20 business days, and potentially longer when additional documentation is required. (Microsoft Learn)


9. Complete Email Verification

Watch the Primary Email carefully.

Microsoft sends email-verification links as part of the organization-validation process. The verification link is valid for seven days. (Microsoft Learn)

This is another reason the Primary Email should be:

  • Monitored.

  • Able to receive external messages.

  • Associated with an individual at the organization.

  • On the business domain.

If email verification fails, Microsoft’s current guidance says a new identity-validation request may be required. (Microsoft Learn)

Once everything has been accepted, the Identity Validation status should eventually become:

Completed


10. Check the Certificate Subject Preview

Once completed, inspect the certificate subject preview.

It should contain the organization name you expect, for example:

CN=Example Software Company
O=Example Software Company

It may also offer address information such as:

STREET=123 Business Street
L=Somewhere
S=State
C=US
PC=12345

This matters because the certificate subject is what becomes part of your code-signing certificate.


11. Create the Public Trust Certificate Profile

Go to:

Artifact Signing account → Certificate profiles → Create

Create a Public Trust certificate profile.

Give it a useful internal name, for example:

ProductionSigning

or:

SetupBuilderSigning

When prompted for Verified CN and O, select the completed organization identity.

If the screen presents Program Type and you are simply signing normal Windows applications/installers, don’t select a specialized security program such as Windows Endpoint Security Platform unless your product actually participates in that program.

Address privacy

Azure may offer checkboxes such as:

Include street address
Include postal code

Think carefully before enabling these.

Microsoft says these options cause the address/postal information to be included in the certificate subject. (Microsoft Learn)

For a home-based software business, leaving them unchecked prevents the home street address from unnecessarily becoming part of every publicly inspectable code-signing certificate.

The important publisher fields can remain:

CN=Example Software Company
O=Example Software Company

After creation, the certificate profile should show:

Active


12. Install SetupBuilder 2025 Artifact-Signing Requirements

SetupBuilder 2025 supports Microsoft’s cloud signing system, although SetupBuilder material may refer to it as Trusted Signing while Microsoft now calls it Artifact Signing.

On the Windows machine where SetupBuilder builds/signs the installation, you’ll need the supporting signing components.

.NET 8 Runtime

Install the regular:

.NET Runtime 8.x

The description on Microsoft’s download page says it contains the components needed to run a console app.

You do not need ASP.NET Core Runtime merely to satisfy this requirement.

Download .NET 8 from Microsoft

Use the appropriate Windows architecture—normally x64 on a modern 64-bit development machine.

SetupBuilder SignInstall

SetupBuilder 2025 provides a SignInstall package containing signing components compatible with its Artifact/Trusted Signing support.

Install the appropriate x86/x64 version as required by your SetupBuilder environment.

After installation, locate the SignTool installed by the Lindersoft package. SetupBuilder needs an Artifact Signing-compatible SignTool rather than blindly continuing to use an ancient signtool.exe left over from a previous PFX-based certificate installation.

Microsoft’s current Artifact Signing SignTool integration has specific SignTool and supporting-component prerequisites. (Microsoft Learn)


13. Create the Artifact Signing JSON File

Unlike traditional code signing, you do not select a .pfx certificate.

Create a small JSON configuration file containing the Azure Artifact Signing information.

For example:

{
  "Endpoint": "https://YOUR-REGION.codesigning.azure.net/",
  "CodeSigningAccountName": "YourArtifactSigningAccount",
  "CertificateProfileName": "ProductionSigning"
}

Save it somewhere permanent, for example:

C:\CodeSigning\metadata.json

The endpoint must correspond to the Azure region where the Artifact Signing account was created. Microsoft explicitly requires the endpoint URI to match the account/profile region. (Microsoft Learn)

The file does not contain:

  • Private key

  • Certificate password

  • Azure password

Azure holds the signing key.


14. Configure SetupBuilder 2025 Code Signing

In SetupBuilder 2025 go to:

Configuration → Code-Signing

Configure the fields approximately as follows.

SignTool

Point this to the newer SignTool installed for SetupBuilder/Artifact Signing.

Software Publisher Certificate

Instead of selecting an old .pfx, choose the Trusted Signing .json configuration and point SetupBuilder to:

C:\CodeSigning\metadata.json

Trusted Signing DLIB

If SetupBuilder labels this optional, it can normally be left blank when the supporting signing package has already installed/configured the required components.

If signing later fails because the DLIB cannot be located, specify it explicitly.

PFX Password

Leave this blank.

Artifact Signing doesn’t use your old PFX file or PFX password.

SHA-1 timestamp server

Leave blank.

SHA-2 timestamp server

Use Microsoft’s Artifact Signing timestamp service:

http://timestamp.acs.microsoft.com

Microsoft’s SignTool integration uses SHA-256 for file digest and timestamp digest. (Microsoft Learn)

Certificate configuration choice

Select:

Use Software Publisher Certificate Configuration

Do not select SafeNet/eToken options unless you are actually using that hardware-token infrastructure.

eToken configuration

Ignore it for Azure Artifact Signing.

Signing algorithm

Choose:

SHA-2 only

There’s normally no reason to use SHA-1 for current Windows software.


15. Install Azure CLI

The next piece is easy to overlook.

SetupBuilder/SignTool needs an authenticated Azure identity in order to request the signature.

Install Microsoft’s Azure CLI on the same Windows development/build machine.

With Windows Package Manager:

winget install --exact --id Microsoft.AzureCLI

Here:

--id Microsoft.AzureCLI

identifies the package, while:

--exact

tells WinGet to require an exact package-ID match.

After installation, close and reopen Command Prompt/PowerShell so the new az command is available.


16. Authenticate Azure CLI

Run:

az login

Complete Microsoft’s browser authentication and MFA.

If your Azure account belongs to a particular Entra tenant and ordinary az login has trouble finding the subscription, Azure CLI may tell you to log into the tenant explicitly:

az login --tenant YOUR-TENANT-ID

For example:

az login --tenant xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

If interactive browser authentication is troublesome, Azure CLI also supports device-code authentication:

az login --tenant YOUR-TENANT-ID --use-device-code

Then verify the subscriptions visible to the authenticated account:

az account list --output table

If necessary, select the subscription containing the Artifact Signing account:

az account set --subscription "YOUR-SUBSCRIPTION-ID-OR-NAME"

Finally verify:

az account show --output table

The account needs access to the correct subscription/tenant and must have the Artifact Signing Certificate Profile Signer role.

Microsoft’s Artifact Signing SignTool integration uses Azure Identity/DefaultAzureCredential, which supports credentials such as the authenticated Azure CLI session. (Microsoft Learn)


17. Restart SetupBuilder and Perform a Test Signing

After Azure CLI authentication succeeds:

  1. Close SetupBuilder.

  2. Reopen SetupBuilder.

  3. Enable code signing on one test EXE or DLL.

  4. Run the build/sign operation.

Starting with one file makes authentication/configuration errors much easier to diagnose than turning signing on for an entire installation immediately.

If a failed signing attempt leaves a file locked, check Task Manager/Resource Monitor for a leftover:

signtool.exe

A failed authentication attempt can occasionally leave SignTool running and holding the EXE/DLL open. Close SetupBuilder first and then terminate the orphaned SignTool process if necessary.


18. Verify the Resulting Signature

Once signing succeeds, right-click the signed EXE or DLL:

Properties → Digital Signatures

You should see the verified organization/publisher name.

Select the signature and choose:

Details

The important result is:

This digital signature is OK.

Also confirm that the file was timestamped.


19. Don’t Be Alarmed by the Short Certificate Lifetime

One thing that looks strange to developers accustomed to Sectigo-style certificates is the very short lifetime of the actual Artifact Signing certificate.

That’s intentional.

Artifact Signing uses short-lived signing certificates rather than issuing you a traditional long-lived PFX certificate. The timestamp is therefore extremely important: properly timestamped signatures remain verifiable after the individual short-lived signing certificate expires.

In other words, don’t see a certificate valid for only a few days and assume something is wrong.


20. Enable Signing for the Rest of the Installation

Once one EXE/DLL signs successfully and verifies correctly, enable signing for the rest of the files that are distributed:

  • Main application EXEs

  • Helper applications

  • Services

  • Updaters

  • DLLs

  • Other executable components

  • Final SetupBuilder installer

The normal goal is:

Sign the individual executable components first → build the installation → sign the completed installer last.

Then spot-check:

  • Main EXE

  • One DLL

  • One secondary EXE

  • Final installer

Each should show the expected organization name and:

This digital signature is OK.


Quick SetupBuilder Checklist

For someone who has already completed the Azure verification and just needs to configure a build PC, the short version is:

AZURE
✓ Artifact Signing account created
✓ Public organization identity = Completed
✓ Public Trust certificate profile = Active
✓ Artifact Signing Certificate Profile Signer role assigned

BUILD MACHINE
✓ SetupBuilder 2025 installed
✓ .NET 8 Runtime installed
✓ SetupBuilder SignInstall installed
✓ Compatible SignTool selected
✓ Artifact Signing metadata JSON created
✓ Azure CLI installed

SETUPBUILDER CODE-SIGNING
✓ Software Publisher Certificate = Trusted Signing JSON
✓ Trusted Signing DLIB = blank unless explicitly needed
✓ PFX Password = blank
✓ SHA-1 timestamp = blank
✓ SHA-2 timestamp = http://timestamp.acs.microsoft.com
✓ Use Software Publisher Certificate Configuration
✓ SHA-2 only

AZURE AUTHENTICATION
✓ az login --tenant <tenant-id>
✓ MFA completed
✓ az account list --output table
✓ Correct subscription selected
✓ az account show --output table

TEST
✓ Test EXE/DLL signs
✓ Publisher name is correct
✓ "This digital signature is OK"
✓ Timestamp is present
✓ Final SetupBuilder installer is signed

Thanks for posting this Ray!

I’m sure it will help a lot of developers make their way through the process.

I took the liberty of using PageSnip’s new AI helper that creates a markdown document from a forum discussion to create a PDF of it that you and other developers can download as an offline resource.

Code Signing with Azure.pdf (135.3 KB)

PageSnip makes it easy to capture and store online content in your own collections and libraries.

Then everything is available in our full text search so it is easy to find again.

You can also “pin” content so you can find it in our Pin Manager and there is even an option to add it to our Quick Pin bar that can auto hide at the bottom of your screen for quick access..

Charles

Great. I was going to create a PDF but didn’t know where to put it. I spent about a week with this code signing issue, and because it was in AI, I thought maybe it could do a summary. Microsoft could make a simple wizard that would walk folks through all of this if they wanted to.

Ray

Hi Ray,

If you don’t mind I’ll post a copy of it over in the old Clarion newsgroups in case there are people there who don’t yet monitor posts here.

On the wizard and the complexity of the process, I totally agree that Microsoft could definitely make it easier.

Back when I started making my way through it it was even worse.

The AI’s had not quite caught up with the process since it was all new and they would quite often send you down a rabbit hole into other Microsoft online resources that would lead to dead ends.

Even Azure itself leaves a lot to be desired IMHO.

It is still a giant unwieldy beast and far more difficult to navigate than it should be.

Instead of a simple “Start here, do this, then do that…” type wizard or tutorial you end up in the swamp where you just KNOW that a programmer was saying “while we are here, we could do that, but we could also do this, and this, and this, and this … or that too”.

Someone needs to explain to them that sometimes less is more.

:slight_smile:

Anyway thanks again for the effort and for passing it on.

Charles

Yeah, programmers can make things much more difficult. It took me many years to get into the customers’ heads and realize I’m the idiot. However, it is harder to make user friendly software from the programmers perspective. I always tell people when they show me some complicated software, that they hire programmers straight out of junior high.

With Azure, they could simply replace their menu system.. but we know MS has been trying to get their menu’s right for years… so that’s not going to happen.

Anyway, post it anywhere it will do some good.

Thanks,

Ray