我们希望为我们的应用程序添加自动软件更新,但我们公司尚未准备好从受信任的根CA购买代码签名证书,因此我们将使用自签名证书来签署代码更新(.exe和.dll)现在。
问题:如何使用Microsoft的Cryptography API验证使用自签名证书签名的二进制文件,而无需安装证书?要检查的.cer文件将与应用程序捆绑在一起。或者使用通用加密库是否更简单?
答案 0 :(得分:3)
你可以跳过整个X509的事情,毕竟如果你要使用自己的证书,你真的不需要它......
对于您想要做的事情,首先您必须生成RSA私钥/公钥对。然后将公钥存储在应用程序中。
当您有更新时,您可以在您的网站上签名,方法是获取MD5或SHA-1或您想要使用的任何哈希值;然后用私钥加密该哈希。已安装的应用程序获取更新和签名(加密的哈希);当应用程序获取二进制文件时,它会计算其哈希值,然后使用公钥解密另一个并比较它们。如果它们是相同的,则它是有效的更新,否则您拒绝它并警告用户或其他东西。
使用自签名的X509证书,机制就是这样,但是公钥会有一堆额外的数据,例如发行者的身份,它将与证书的身份相同。
答案 1 :(得分:0)
我似乎记得在几年前听说过在Win2k时代启用自签名证书的方法,但它非常hacky,完全不适合公开部署,并且可能已经“修复”了。如果您考虑使用其他加密库或开发自己的加密库,请注意:很难区分好的加密和不良的加密。