在通过基于asp.net的网站提供下载之前,用.Net对文件服务器端进行数字签名的最佳方法是什么
此外,如何触发签名检查,从而证明文件在Web浏览器的下载过程中未被处理过
答案 0 :(得分:3)
签名不需要包含在ZIP文件中,它可以是“分离”签名。因此,您可以使用zip并允许某人验证信号,这通常只是一系列十六进制或base64字符,带有您编写的应用程序带外。
在高级别,签名步骤是:
AsymmetricAlgorithm privateKey = certificate.PrivateKey;
byte[] buffer = Encoding.Default.GetBytes(<data from the zip>);
byte[] signature = privateKey.SignData(buffer, new SHA1Managed());
和验证:
RSACryptoServiceProvider publicKey = certificate.PublicKey.Key as RSACryptoServiceProvider;
bool verify = publicKey.VerifyData(buffer, new SHA1Managed(), signature);
答案 1 :(得分:0)
没有客户端插件或下载管理器,您无能为力。保护它的最佳方法是使用HTTPS,但如果这不是一个选项,那么确保完整性的通常方法是在最终用户可以验证的站点上提供文件的MD5哈希。如果您将其作为文件下载进行,那么在没有插件的情况下,您无法在客户端实际自动化验证,因为Javascript等无法访问该文件来验证它。
答案 2 :(得分:0)
您需要定义您想要为自己和用户辩护的风险。虽然PKWare的ZIP格式的AppNote将数字签名定义为格式的一部分,但我怀疑存在很多解压缩程序,它们正确支持ZIP文件中数字签名的验证。
如果您担心可以在中间修改文件内容,则可以使用以下选项: 1)HTTPS,如上所述 2)PGP签名包。您可以为您分发的现有ZIP存档创建分离签名,并将签名放在下载链接附近,或者,如果您的目标是Windows,则创建自解压PGP存档。 PGP格式也包括压缩。在这两种情况下,您都需要将公共PGP密钥放到您的站点上。但请注意,如果您以这种方式分发,那么更改文件的人也可以更改公钥。