12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- ###########################################################################
- # code-sign-exe.sh #
- # --------------------- #
- # Date : March 2017 #
- # Author : Larry Shaffer #
- # Copyright : (C) 2017 by Boundless Spatial #
- # Email : lshaffer at boundlessgeo dot com #
- ###########################################################################
- # #
- # This program is free software; you can redistribute it and/or modify #
- # it under the terms of the GNU General Public License as published by #
- # the Free Software Foundation; either version 2 of the License, or #
- # (at your option) any later version. #
- # #
- ###########################################################################
- # Code-sign .exe file using signtool and installed DigiCert code-signing
- # cert/key and CA
- #
- # Requirements:
- # MinGW / msys shell
- # Need Win SDK 7.0 or higher
- # Need internet connection
- # Install signing cert/key bundle into Machine (all users) cert store
- # Install any intermediate CA into Machine cert store,
- # as signtool will include it
- # Use /sm if signing cert was imported to Machine (not My) cert store
- # SHA1 signature of cert MUST be uppercase
- #
- # You can also use the DigiCert GUI-based utility:
- # https://www.digicert.com/util/
- # NOTE: utility only does SHA1 signing of exe, so not useful for Win 10+
- #
- # signtool docs, circa 2016:
- # https://msdn.microsoft.com/en-us/library/aa387764(v=vs.85).aspx
- # example signing using Machine cert store and sha256
- # signtool sign /sm /tr http://timestamp.digicert.com /td sha256 ^
- # /fd sha256 /sha1 UPPERCASESHA1SIGNTURE some.exe
- set -e
- # set -x
- USAGE () {
- echo "usage: $0 certhash some.exe"
- echo " certhash: signing cert SHA1 hash; must be UPPERCASE"
- echo " some.exe: path of .exe to sign"
- }
- if [ "$#" -ne 2 ]; then
- usage
- exit 1
- fi
- if [ -z $1 ] || [ -z $2 ]; then
- USAGE
- exit 1
- fi
- if ! [ -f $2 ]; then
- echo "exe file not found"
- exit 1
- fi
- if ! [[ $2 == *.exe ]]; then
- echo "extension not .exe"
- exit 1
- fi
- export PATH="/c/Program Files/Microsoft SDKs/Windows/v7.1/Bin":/usr/bin:$PATH
- # echo $1
- # echo $2
- signtool sign //sm //fd sha256 //sha1 $1 $2
- signtool timestamp //tr http://timestamp.digicert.com //td sha256 $2
- signtool verify //V //pa $2
|