使用存储在AWS CloudHSM中的证书对mage.exe清单进行签名

时间:2019-02-18 17:39:06

标签: clickonce mage amazon-cloudhsm

我正在尝试使用mage.exe和存储在Amazon CloudHSM中的证书签署清单。

我安装了Amazon CloudHSM Windows客户端,该客户端添加了Cavium Key Storage ProviderCavium CNG Provider提供程序。我可以在CloudHSM中使用我的证书与signtool.exe进行签名,但是无法使mage.exe正常工作。我有NETFX 4.7.2的mage.exe,所以它有-CryptoProvider参数。

我尝试为-CryptoProvider指定以上两个提供者:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\mage.exe" -Sign myapp.exe.manifest -CertHash <thumbpring> -CryptoProvider "Cavium Key Storage Provider" -KeyContainer my

但是我得到了

  

内部错误,请重试。指定的提供者类型无效。

调用mage.exe与备用密钥存储提供程序签署清单的正确参数是什么?

注意:证书必须在HSM中。不能在其他商店中使用证书。

注意2:由于我可以使用signtool.exe进行签名,因此可以访问证书,正确设置了CloudHSM等。此问题似乎特定于使用mage.exe访问该证书。

更新:我使用JetBrains dotPeek拆解了.NET Framework 4.7.2 mage.exe,将其导出到项目中,对项目进行了充分的黑客攻击,以便可以对其进行编译,并且我可以使用被入侵的{ {1}}。我只需要mage.exe参数,而不需要-CertHash。我不确定这是否是权限问题,因为我进行编译时所用的一些方法是程序集属性,并使其未签名。

我不认为已解决此问题,因为我不想在生产应用程序中使用-CryptoProvider的黑版。另外,我什至都没有确认我是否可以对ClickOnce应用程序进行正确部署的方式对应用程序和部署清单进行签名。这只是使用“授权” mage.exe查找解决方案的更多信息。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的事情...我相信MAGE中有一个错误

错误记录在这里: https://github.com/Microsoft/dotnet/issues/986

我也不得不重新编译法师,然后重新定位到.NET 4.7.2

我必须使用-CertFile,-CryptoProvider和-KeyContainer对其进行签名,我不知道如何使-CertHash正常工作。.

请注意查找密钥容器:

运行

  

certutil-存储我的

然后查找您的证书,然后使用“密钥容器= XXXXX”值

答案 1 :(得分:0)

使用法师签名清单文件时,我遇到了类似的问题。就我而言,私钥存储在SafeNet USB eToken中,但是我得到的错误有所不同(“此证书不包含私钥...”)。
最终,我通过反编译法师(使用JetBrains dotPeek),更改一行(相关)代码并再次重新编译来使其工作。
有关更多详细信息,请参见https://github.com/Microsoft/dotnet/issues/986#issuecomment-534970170上的评论。