Cryptography 如何验证使用自签名证书签名的二进制文件?

Cryptography 如何验证使用自签名证书签名的二进制文件?,cryptography,code-signing,signing,authenticode,Cryptography,Code Signing,Signing,Authenticode,我们希望向应用程序添加自动软件更新,但我们公司尚未准备好从受信任的根CA购买代码签名证书,因此我们将使用自签名证书对代码更新(.exe和.dll)进行签名 问题:如何使用Microsoft的加密API验证使用自签名证书签名的二进制文件,而不必安装证书?要检查的.cer文件将与应用程序捆绑在一起。还是使用通用加密库更简单?我似乎记得几年前听说过一种启用自签名证书的方法,那是在Win2k时代,但它非常粗糙,根本不适合公开部署,而且可能已经“修复”。如果您确实考虑使用其他加密库,或者开发自己的加密库,

我们希望向应用程序添加自动软件更新,但我们公司尚未准备好从受信任的根CA购买代码签名证书,因此我们将使用自签名证书对代码更新(.exe和.dll)进行签名


问题:如何使用Microsoft的加密API验证使用自签名证书签名的二进制文件,而不必安装证书?要检查的.cer文件将与应用程序捆绑在一起。还是使用通用加密库更简单?

我似乎记得几年前听说过一种启用自签名证书的方法,那是在Win2k时代,但它非常粗糙,根本不适合公开部署,而且可能已经“修复”。如果您确实考虑使用其他加密库,或者开发自己的加密库,请注意:很难区分好的加密和坏的加密。

我似乎记得几年前,在Win2k时代,听到过一种启用自签名证书的方法,但它非常粗糙,根本不适合公共部署,而且可能已经被使用“修复”。如果您确实考虑使用其他加密库,或开发自己的加密库,请注意:很难区分好的加密和坏的加密。

您可以跳过整个X509,毕竟,如果您要使用自己的证书,您并不真的需要它

要实现此目的,首先必须生成RSA私钥/公钥对,然后将公钥存储在应用程序中

当您有一个更新时,您可以通过获取MD5或SHA-1或您想要使用的任何散列在您的站点上对其进行签名;然后使用私钥对该散列进行加密。安装的应用程序获取更新和签名(加密的散列);当应用程序获取二进制文件时,它计算其哈希值,然后使用公钥解密另一个文件并进行比较。如果它们相同,则为有效更新,否则您将拒绝它并警告用户或其他


对于自签名的X509证书,其机制将完全相同,但公钥将包含一系列附加数据,如颁发者的身份,这些数据将与证书的身份相同。

您可以跳过整个X509过程,毕竟,如果要使用自己的证书,您并不真正需要它n证书

要实现此目的,首先必须生成RSA私钥/公钥对,然后将公钥存储在应用程序中

当您有一个更新时,您可以通过获取MD5或SHA-1或您想要使用的任何散列在您的站点上对其进行签名;然后使用私钥对该散列进行加密。安装的应用程序获取更新和签名(加密的散列);当应用程序获取二进制文件时,它计算其哈希值,然后使用公钥解密另一个文件并进行比较。如果它们相同,则为有效更新,否则您将拒绝它并警告用户或其他

对于自签名的X509证书,机制正是这样,但公钥将包含一组附加数据,如颁发者的身份,这些数据将与证书的身份相同