Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
129 lines
3.6 KiB
Plaintext
129 lines
3.6 KiB
Plaintext
---
|
|
title: "Code signing custom builds"
|
|
---
|
|
import Tabs from '@theme/Tabs';
|
|
import TabItem from '@theme/TabItem';
|
|
|
|
<PlanAvailability slug="all-commercial" />
|
|
|
|
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.
|
|
|
|
<Important>
|
|
|
|
Make sure to follow each operating system's guidelines and best practices for signing applications.
|
|
|
|
</Important>
|
|
|
|
## Prerequisites
|
|
|
|
<Tabs>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
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.
|
|
|
|
</TabItem>
|
|
<TabItem value="linux" label="Linux">
|
|
|
|
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.
|
|
|
|
</TabItem>
|
|
<TabItem value="mac" label="Mac">
|
|
|
|
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.
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
|
|
## Process
|
|
|
|
<Tabs>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
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 <cert hash> /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 <path-to-your-executable>
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="linux" label="Linux">
|
|
|
|
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
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="mac" label="Mac">
|
|
|
|
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
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
|
|
## 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.
|