Code Signing

Enterprise Code Signing Certificates: Best Practices Guide

How to implement secure code signing for enterprise software development and distribution.

E
Emily Rodriguez
DevSecOps Lead
2025-12-01
10 min read

Why Code Signing Matters

Code signing is the process of digitally signing software to verify its authenticity and integrity. For enterprises, code signing is essential for:

  • Trust: Users and systems can verify software comes from a trusted source
  • Integrity: Detect if code has been tampered with
  • Compliance: Meet regulatory requirements for software distribution
  • Security: Prevent malware injection into the software supply chain

The Risk of Unsigned Code

Without proper code signing:

  • Operating systems display security warnings
  • Enterprise software deployment is blocked
  • App stores reject submissions
  • Supply chain attacks go undetected

Types of Code Signing Certificates

Standard Code Signing

  • Signs executables, DLLs, drivers
  • Private key stored on developer machines
  • Suitable for internal or limited distribution

EV Code Signing

  • Extended Validation with hardware key requirement
  • Private key must be on HSM or hardware token
  • Immediate SmartScreen reputation for new publishers
  • Required for Windows kernel-mode drivers

Apple Code Signing

  • Developer ID for macOS distribution
  • iOS distribution certificates
  • Mac Installer certificates
  • Notarization requirements

Java Code Signing

  • JAR signing for Java applications
  • Applet signing (legacy)
  • Android APK signing

Enterprise Code Signing Architecture

Centralized Signing Service

Implement a centralized signing infrastructure:

  1. Signing Server: Dedicated secure server for signing operations
  2. HSM Integration: Hardware Security Module for key protection
  3. API Interface: RESTful API for CI/CD integration
  4. Audit Logging: Complete audit trail of all signing operations
  5. Access Control: Role-based access to signing keys

CI/CD Integration

Integrate code signing into build pipelines:

yaml
1# Example GitHub Actions workflow 2- name: Sign Windows Executable 3 uses: tigertrust/code-signing-action@v1 4 with: 5 api-key: ${{ secrets.TIGERTRUST_API_KEY }} 6 file-path: build/myapp.exe 7 certificate-name: production-signing-cert 8 timestamp-url: http://timestamp.digicert.com

Key Management

Secure key management is critical:

HSM Requirements

  • FIPS 140-2 Level 2 or higher
  • Physical tamper protection
  • Access control and audit logging
  • Key backup and recovery procedures

Key Hierarchy

  • Root signing keys (offline, highest security)
  • Intermediate/issuing keys (operational use)
  • Team or project-specific keys (delegated authority)

Code Signing Best Practices

Protect Private Keys

  • Never store private keys on developer machines
  • Use HSMs for all production signing keys
  • Implement strong access controls
  • Regular key rotation (annually or per major version)

Implement Timestamping

Always timestamp signatures:

bash
1signtool sign /sha1 THUMBPRINT /tr http://timestamp.digicert.com /td sha256 /fd sha256 myapp.exe

Benefits of timestamping:

  • Signatures remain valid after certificate expires
  • Long-term verification of signed code
  • Compliance requirement for many use cases

Use Strong Algorithms

  • SHA-256 or higher for hashing
  • RSA 2048-bit minimum, 4096-bit recommended
  • ECDSA P-256 or P-384 for modern implementations

Separate Keys by Purpose

  • Development/test signing keys
  • Production signing keys
  • Different keys per product or team
  • Separate keys for different platforms

Code Signing Workflow

Development Phase

  1. Developers build and test locally
  2. Internal builds signed with development certificate
  3. QA validation on signed development builds

Pre-Release

  1. Build artifacts from clean environment
  2. Security scan before signing
  3. Approval workflow for production signing
  4. Sign with production certificate
  5. Notarize for Apple platforms

Distribution

  1. Verify signatures before distribution
  2. Store signed artifacts securely
  3. Distribute through authorized channels
  4. Monitor for certificate revocation

Platform-Specific Considerations

Windows Code Signing

powershell
1# Sign with signtool 2signtool sign /sha1 THUMBPRINT /tr http://timestamp.digicert.com /td sha256 /fd sha256 myapp.exe 3 4# Verify signature 5signtool verify /pa /v myapp.exe

macOS Code Signing

bash
1# Sign application 2codesign --deep --force --verify --verbose --sign "Developer ID Application: Company Name" MyApp.app 3 4# Notarize for distribution 5xcrun notarytool submit MyApp.dmg --keychain-profile "notarization" --wait 6 7# Staple notarization ticket 8xcrun stapler staple MyApp.dmg

Linux Code Signing

bash
1# GPG signing 2gpg --armor --detach-sign myapp.tar.gz 3 4# Verify 5gpg --verify myapp.tar.gz.asc myapp.tar.gz

Compliance and Audit

Audit Trail Requirements

Maintain records of:

  • Every signing operation (who, what, when)
  • Key usage and access
  • Certificate lifecycle events
  • Policy violations and exceptions

Compliance Standards

Code signing supports compliance with:

  • PCI DSS: Secure software development
  • SOC 2: Change management controls
  • FDA 21 CFR Part 11: Electronic signatures for medical devices
  • ISO 27001: Information security management

Incident Response

Certificate Compromise

If a signing certificate is compromised:

  1. Immediately revoke the certificate
  2. Identify all software signed with compromised key
  3. Resign with new certificate
  4. Notify affected customers
  5. Conduct root cause analysis

Malware Signed with Valid Certificate

If malware is discovered signed with your certificate:

  1. Investigate how signing occurred
  2. Revoke certificate if necessary
  3. Review access controls and logs
  4. Implement additional safeguards

Conclusion

Enterprise code signing certificates are essential for secure software distribution and supply chain security. By implementing centralized signing infrastructure, proper key management, and robust CI/CD integration, organizations can ensure their software is trusted and secure.

TigerTrust provides enterprise code signing capabilities as part of our comprehensive certificate lifecycle management platform, including HSM integration, CI/CD automation, and complete audit logging.

TOPICS

enterprise code signing certificates
DevSecOps
supply chain security
software security

SHARE THIS ARTICLE

Related articles

PKI Fundamentals

CRL vs OCSP: How Certificate Revocation Actually Works (and Where It Still Fails)

A certificate is a signed statement that a key belongs to an identity. Revocation is how a CA says 'actually, never mind'. Twenty-five years into the X.509 era we still have two mechanisms for revocation - CRLs and OCSP - plus a dozen variations and workarounds. This is the field guide: what each one does, where each one breaks, and the specific configuration you want in 2026.

14 min read
Industry Analysis

350 Roots, One Byte: What eMudhra Means for the Multi-CA Trust Model

The WebPKI trusts around 350 root CAs operated by about 60 organisations. Any one of them can issue a certificate for any domain on the internet. eMudhra's eight single-byte intermediates are a textbook example of why that architecture is structurally fragile - and why the governance machinery around it, imperfect as it is, remains the actual defence. A note for CISOs, board members, and anyone who has to brief one of them.

12 min read
Incident Analysis

eMudhra, Eight Bytes of Entropy, and What Breaks When a CA Ships Toy Keys

Eight intermediate CAs cross-signed by Sectigo were issued in April 2025 with private keys that fit in a single byte - one of them was literally the number 4. Browsers blocked the intermediates within hours. Everything that isn't a browser is still an open question. Here's the incident, the attack surface, and the specific action items for anyone running TLS, code signing, or device enrollment on anchors they don't control.

11 min read

Ready to Transform Your Certificate Management?

See how TigerTrust can help you automate certificate lifecycle management at scale.