There are many sites that explain how to run signtool.exe
on a .pfx
certificate file, which boil down to:
signtool.exe sign /f myce
I ended up doing a very similar approach to what @GiulioVlan suggested, but with a few changes.
I created a new MSBuild task that executes signtool.exe. This task serves a couple main purposes:
Source: https://gist.github.com/gregmac/4cfacea5aaf702365724
This specifically takes all output and runs it through a sanitizer function, replacing the password with all *'s.
I'm not aware of a way to censor regular MSBuild commands, so if you pass the password on commandline directly to signtool.exe using it will display the password -- hence the need for this task (aside from other benefits).
I debated about a few ways to store the password "out-of-band", and ended up settling on using the registry. It's easy to access from MSBuild, it's fairly easy to manage manually, and if users don't have RDP and remote registry access to the machine, it's actually reasonably secure (can anyone say otherwise?). Presumably there are ways to secure it using fancy GPO stuff as well, but that's beyond the length I care to go.
This can be easily read by msbuild:
$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\1 Company Dev@CodeSigningCertPassword)
And is easy to manage via regedit:
In the tag:
(You could also put this in a common file with other tasks, or even embed directly)
Then, in whichever target you want to use for signing:
So far this works well.