在开始下载到客户端的Web浏览器之前对.NET程序集进行代码签名

问题描述:

我正在使用signtool.exe对来自C#的自动生成的可下载内容进行数字签名,然后调用命令行,然后将该文件传输到客户端浏览器。问题是,虽然网上的签名似乎没问题,但下载的文件似乎缺少一部分内容。如果右键单击服务器上生成的文件,则会看到完美的签名,如果您查看证书,则表示“此数字签名确实无误”。在开始下载到客户端的Web浏览器之前对.NET程序集进行代码签名

下载的文件看起来不一样。虽然它的体积较小15个字节,但没有损坏,但是问题名称完好无损,它表示此数字签名无效。

在运输过程中发生了什么?我使用此代码签名内容:提前

Response.Clear();
Response.ContentType = "application/exe";
Response.AddHeader("content-disposition", "filename=" + filename);
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.TransmitFile(filePath);

谢谢
弗兰克。

+0

您是否在使用证书签署不属于受信任机构的程序集?这将是我的第一次猜测之一。 – 2010-11-11 15:37:04

+0

+1我需要这些信息。你还可以通过编程获得一些信息吗? – 2011-09-16 11:50:12

在标题中发送给客户端的响应是正确的长度还是错误的(短的)响应?使用Fiddler或Firebug进行检查。

如果它是正确的,但客户端没有收到数据,请在TransmitFile后尝试一个Reponse.Flush()。我认为这可能只是迷信,但很多人似乎都这么做。

+0

答案是正确的。 Response.Flush()似乎已经做到了。谢谢。 – Michali 2010-11-12 14:29:45

+0

这仍然令人困惑,为什么响应会修剪一些元数据。 – Michali 2010-11-12 14:30:38

+0

这并不是说它是'修剪过的元数据',它只是在流缓冲区中留下了一些未刷新的数据。 – 2010-11-12 17:18:57

尝试刷新您的FileInfo fi,然后再读取Content-Length标题的长度,它可能会在签署之前缓存旧的长度。

+0

fi在签名应用程序后被实例化。此外,下载的证书中还有一个发行者姓名。 – Michali 2010-11-11 15:37:24