Windows Signing
Sign your Windows executables with certificates
This guide covers how to sign your Wails applications for both macOS and Windows, with a focus on automated signing using GitHub Actions.
Windows Signing
Sign your Windows executables with certificates
macOS Signing
Sign and notarize your macOS applications
Obtain a Code Signing Certificate
Prepare for GitHub Actions
Configure GitHub Actions
name: Sign Windows Binary
on: workflow_dispatch: release: types: [created]
jobs: sign: runs-on: windows-latest steps: - uses: actions/checkout@v3
- name: Import Certificate run: | New-Item -ItemType directory -Path certificate Set-Content -Path certificate\certificate.txt -Value ${{ secrets.WINDOWS_CERTIFICATE }} certutil -decode certificate\certificate.txt certificate\certificate.pfx
- name: Sign Binary run: | & 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe' sign /f certificate\certificate.pfx /t http://timestamp.sectigo.com /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /v /fd sha256 .\build\bin\app.exe
sha256
Prerequisites
Certificate Setup
Configure Notarization
{ "source": ["./build/bin/app"], "bundle_id": "com.company.app", "apple_id": { "password": "@env:AC_PASSWORD" }, "sign": { "application_identity": "Developer ID Application: Company Name" }}
GitHub Actions Configuration
name: Sign macOS Binary
on: workflow_dispatch: release: types: [created]
jobs: sign: runs-on: macos-latest steps: - uses: actions/checkout@v3
- name: Import Certificate env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }} run: | echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 security create-keychain -p "" build.keychain security default-keychain -s build.keychain security unlock-keychain -p "" build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "" build.keychain
- name: Sign and Notarize env: AC_USERNAME: ${{ secrets.AC_USERNAME }} AC_PASSWORD: ${{ secrets.AC_PASSWORD }} run: | gon -log-level=info ./build/darwin/gon-sign.json
Security
Workflow
Verification
name: Sign Binaries
on: workflow_dispatch: release: types: [created]
jobs: sign: strategy: matrix: platform: [windows-latest, macos-latest] runs-on: ${{ matrix.platform }}
steps: - uses: actions/checkout@v3
# Windows Signing - name: Sign Windows Binary if: matrix.platform == 'windows-latest' env: CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} run: | New-Item -ItemType directory -Path certificate Set-Content -Path certificate\certificate.txt -Value $env:CERTIFICATE certutil -decode certificate\certificate.txt certificate\certificate.pfx & 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe' sign /f certificate\certificate.pfx /t http://timestamp.sectigo.com /p $env:CERTIFICATE_PASSWORD /v /fd sha256 .\build\bin\app.exe
# macOS Signing - name: Sign macOS Binary if: matrix.platform == 'macos-latest' env: MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }} AC_USERNAME: ${{ secrets.AC_USERNAME }} AC_PASSWORD: ${{ secrets.AC_PASSWORD }} run: | echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 security create-keychain -p "" build.keychain security default-keychain -s build.keychain security unlock-keychain -p "" build.keychain security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "" build.keychain gon -log-level=info ./build/darwin/gon-sign.json