有什么方法可以对 Go 编译器生成的 windows 可执行文件进行签名吗?

Is there any way to sign the windows executables generated by the Go compiler?

我正在尝试了解是否有可能对 Go 编译器生成的可执行文件进行签名。我在 build/compile 选项中看不到这个。这可能吗?

签署可执行文件不是编译器的责任,但它是构建过程的一部分。在 Go 编译器生成 EXE 或 DLL 文件后,将构建脚本更改为 运行 signtool.exe。提供私钥文件的路径和密码(如果使用 .pfx 文件),它将为您签名。这与 Visual Studio 使用的过程相同。

https://docs.microsoft.com/en-us/windows/desktop/seccrypto/signtool


显然 Go 的 go build 命令非常简朴:you cannot add additional build steps nor custom commands to go build, nor is there any "hooks" feature for the go command 要么(go generate 除外,但这是一个 pre-build 步骤我们需要 post-build 步骤)。

...这意味着 you'll need a makefile.

这是单文件项目 main.go 的快捷方式 makefile(针对 Windows 上的 GNU make),其中 应该 (未经测试) 在构建后自动 运行s signtool:

# golang makefile based on https://golangdocs.com/makefiles-golang
BINARY_NAME=mygoproject.exe
 
build:
    go build -o ${BINARY_NAME} main.go

    # This runs signtool with a cert in your profile store instead of a *.pfx file, to avoid needing to store a password in the makefile or environment variable: 
    signtool sign /sm /s My /n <certificateSubjectName> /t http://timestamp.digicert.com ${BINARY_NAME}
 
run:
    go build -o ${BINARY_NAME} main.go
    ./${BINARY_NAME}
 
clean:
    go clean
    rm ${BINARY_NAME}

只需 运行 make build 来自您的终端,它应该 正常工作(我希望!)