--- title: "Code signing custom builds" --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; Code signing is an essential process for ensuring the authenticity and integrity of your custom `Mattermost` builds. This guide provides steps on how to code sign a build using your own certificates for Windows, Mac, and Linux. Make sure to follow each operating system's guidelines and best practices for signing applications. ## Prerequisites 1. **Code Signing Certificate**: Obtain a certificate from a Certificate Authority (CA) or use a self-signed certificate if suitable. 2. **SignTool**: Available as part of the Windows SDK. 1. **GPG Key**: Create a GPG key if you don't have one. 2. **GnuPG**: Install [GnuPG](https://gnupg.org/howtos/card-howto/en/ch02.html) if not already installed. 1. **Developer ID Application Certificate**: Obtain from Apple. It requires an Apple Developer account. 2. **Xcode**: Ensure [Xcode](https://developer.apple.com/xcode/) is installed. ## Process 1. **Install SignTool**: Install the Windows SDK to access the `SignTool` utility. 2. **Obtain a Code Signing Certificate**: Purchase or create a certificate (`.pfx` file) via a CA. 3. **Import the Certificate**: Open the `.pfx` file and import it into the Windows Certificate Store. 4. **Sign the Executable** - Open the command prompt as Administrator. - Use `SignTool` to sign your executable: ``` sh signtool sign /v /s "My" /sha1 /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 ``` 1. **Create or Import Your GPG Key**: If you don't have a GPG key, create one: ``` sh gpg --full-generate-key ``` Alternatively, import an existing GPG key, if you have one: ``` sh gpg --import /path/to/your-key.asc ``` 2. **Sign the Package**: Use `dpkg-sig` to sign a Debian package: ``` sh dpkg-sig --sign builder your-package.deb ``` Use `rpmsign` to sign an RPM package: ``` sh rpmsign --addsign your-package.rpm ``` 3. **Verify the Signature**: Verify the signature of a `.deb` package: ``` sh dpkg-sig --verify your-package.deb ``` Verify the signature of an `.rpm` package: ``` sh rpm --checksig your-package.rpm ``` 1. **Obtain a Code Signing Certificate**: Create a `Developer ID Application` certificate in your Apple Developer account and download it. 2. **Import the Certificate**: Double-click the certificate to import it into the Keychain. 3. **Sign the Application**: Use the `codesign` tool from Xcode to sign your application: ``` sh codesign --deep --force --verify --verbose --sign "Developer ID Application: Your Name (TeamID)" /path/to/your.app ``` 4. \[Optional\] **Verify the Signature**: Verify the signature to ensure everything is correctly signed: ``` sh spctl --assess --verbose=4 /path/to/your.app codesign -dv --verbose=4 /path/to/your.app ``` ## Summary - **Windows**: Use `SignTool` from the Windows SDK with your imported code signing certificate. - **Mac**: Use `codesign` and `spctl` tools from Xcode with your Apple Developer ID certificate. - **Linux**: Use `GnuPG` to create/sign with your GPG key, `dpkg-sig` for `.deb` packages, and `rpmsign` for `.rpm` packages.