我在Visual Studio 2017中有一个VSTO程序。为了使我通过ClickOnce发布并在网络上托管文件时安装过程更顺畅,我从DigiCert购买了EV证书。
这是我买的 - https://www.digicert.com/code-signing/ev-code-signing/
所以我等了几天,得到了我的USB令牌,设置了所有内容,现在当我用我新的证书签署应用程序时...安装平台失败。
用户得到的错误是:
Customized Functionality in this application will not work because the certificate used to sign the deployment manifest for AppName or its location is not trusted. Contact your administrator for further assistance.
我联系DigiCert寻求技术支持,他们基本上说这是Visual Studio 2017和操作系统的错误。
然后我打电话给Entrust,看他们是否可以确认,因为他们也有EV证书: https://www.entrust.com/code-signing-certificates/#ev-code-signing-certificates
原来我想在你买一个之前,他们无法回答这个问题。他们只是说“买它并尝试它,如果它不起作用,我们会把钱还给你。”
有没有人知道如何从Visual Studio签名安装?
我希望能够签署此安装并使其正常运行。
答案 0 :(得分:4)
在DigiCert的支持下花了很多时间在手机上,我们终于想出了一个有效的流程。
在这种情况下,最不明显的是你最终做了很多代码签名。
因此,在构建VSTO应用程序时,请使用EV证书对代码进行签名。然后,当您想要发布(使用ClickOnce)时,您将不得不再次签名。
但即使在那之后,您还必须重新签署设置文件两次以使这一切全部工作!
在花了大量时间之后,我现在有了一个批处理文件来完成最后的步骤,包括将安装文件同步到Amazon S3进行部署。
所以我就是这样做的:
Build
(或Rebuild
即可
安全)你必须使用加密狗签名。Properties
Properties
内,转到Signing
并确认您有。{1}}
选择了正确的证书如果您跳过此步骤,该应用程序将不会
安装。Properties
内,请转到Publish
并确保设置
您的发布位置和安装文件夹。我使用的是亚马逊S3
用于安装文件夹。Publish Now
。它会要求你再次签名。现在,你会想到你已经完成了......但你不是。
.p12
证书。我联系了
DigiCert的支持,他们能够免费给我一个(问题
因为我遇到这么多问题所以只有一年了。这是
与EV证书不同。.p12
证书和EV后,我运行以下批次
例程,将setup.exe文件签署为TWICE(一次使用.p12
然后
再次使用EV)并推送到Amazon S3。这是我的SignDeploy.bat
文件:
echo off
cls
echo Signing setup.exe with .p12 Certificate File
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f [LOCATION OF P12 FILE] /p [PASSWORD] [LOCATION OF SETUP.EXE]
pause
echo Signing setup.exe with EV Certificate from Store
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 [EV HASH FROM DIGICERT] [LOCATION OF SETUP.EXE]
pause
echo Dry run on syncing files up to S3
aws s3 sync [LOCAL DEPLOYMENT FOLDER] [S3 BUCKET AND FOLDER LOCATION] --acl public-read --dryrun
echo
echo If that worked, it's time to send them up for real.
echo Control-C to stop now, or...
pause
aws s3 sync [LOCAL DEPLOYMENT FOLDER] [S3 BUCKET AND FOLDER LOCATION] --acl public-read
pause
完成所有这些(我认为您最终总共输入3次EV证书密码)从指定位置下载setup.exe
的用户(必须与应用中指示的相同)才能安装并运行您的VSTO应用程序。
我们在客户端的安装过程中遇到了其他问题,但使用上述过程解决了签名问题。
我不会假装理解为什么这个需要签名这么多次,也没有意义,因为这并不是从Visual Studio内部顺利完成的。 DigiCert试图让我使用Build Events
来执行此操作,但它不能在b / c运行在BUILD的任何一侧而不是PUBLISH。我们需要的是Publish Events
我认为不存在。
我已经探索了使用MsBuild.exe进行更长时间的命令行处理的想法,但是很难以Automatically increment revision with each release
方式执行此操作。
也许这里有人知道如何设置它。我的过程仍然有点手动,但它似乎在这一点上可靠地工作,所以我不会太惹它太多了。
答案 1 :(得分:1)
Setup.exe
进行签名。这是因为Windows在安装新应用程序时将运行完整性检查。这是 Authenticode 技术,适用于通过Windows运行的任何软件。过去,就安全性而言,Authenticode比Mage前进得更快:Authenticode需要签署SHA256摘要,而Mage仅支持SHA1摘要。因此,有时需要对同一文件签名两次。参见full topic here。
但是,这似乎是过去的问题。
我正在使用Sectigo提供的EV代码签名加密狗。 通过ClickOnce签署和发布解决方案所需要做的就是:
Project / Properties / Signing
并选择[从存储中选择...]