none
C#项目给程序集签名的问题。 RRS feed

  • 问题

  • 我们从别处购买了证书,是spc和pvk后缀的。通过pvkimprt将其转换为pfx格式,这个pfx之前我已经成功在VC++的项目里面对程序集签名,可是不知道为何用在C#项目里面的时候,在项目属性对话框里面,当我输入证书的密码之后,就提示“找不到解密的证书和私钥”,请问这是为什么?

     

    注:我在VC++的项目里面,在“生成后事件”里面输入:

    signtool sign /f D:\xxx.pfx /p password /t http://timestamp.wosign.com/timestamp .\Release\myfilename.ocx

    是可以成功对ocx签名的。不知道为何在C#里面就出错。


    da jia hao!
    2011年5月10日 6:10

答案

  • C# 项目属性对话框中在  Build Event 选项卡中就有对应的 Pre-Build 和 Post-Build 事件。

    强签名是托管世界的一个术语,它用来将特定版本、语言区域性、以及特定结构的程序集进行签名。签名后,程序集会拥有一些公钥和私钥,每次该程序集加载时,CLR 会验证这些密钥,以确保被加载的程序集是正确的版本。这是解决 DLL 地狱问题的有效途径之一。

    如果只要求做数字签名,您可以忽略强签名,只是在 Post-Build 中用 Signtool 就可以。但我还是强烈建议您将每一个 Pruduction 质量的程序集强签名。强签名阻止一些未经授权的程序集被加载,对应用程序的安全性有显著的提高。

    有关强签名的问题,可以参考 MSDN 的 Strong Naming, Strong Sign, 或者 sn.exe。


    Mark Zhou
    • 已标记为答案 liubin 2011年5月17日 8:43
    2011年5月11日 6:50

全部回复

  • 您购买的证书应该是用来做数字签名的,而不是用来做强签名的。强签名需要至少是 snk 文件。一般的做法是先做强签名,然后在 Build 的 Post 事件中利用 SingTool 进行数字签名。

    有关强签名 (Strong Sign) 和数字签名 (Digital Sign),请参考相关资料。


    Mark Zhou
    2011年5月10日 10:29
  • 这个证书我已经成功在VC++的项目里面对OCX文件签名了啊(使用Signtool命令行,在“生成后事件”里面执行),为什么在C#里面就不行呢?

    而且,在C#的项目里面,我也找不到“Build 的 Post事件”,这个好像只有在VC++的项目里面才有的。

    请专家继续指导,谢谢啦。


    da jia hao!
    2011年5月11日 2:14
  • 我只要求做数字签名。

    另外什么叫“强签名”?我在VisualStudio里面没有看见这个字眼。


    da jia hao!
    2011年5月11日 2:15
  • C# 项目属性对话框中在  Build Event 选项卡中就有对应的 Pre-Build 和 Post-Build 事件。

    强签名是托管世界的一个术语,它用来将特定版本、语言区域性、以及特定结构的程序集进行签名。签名后,程序集会拥有一些公钥和私钥,每次该程序集加载时,CLR 会验证这些密钥,以确保被加载的程序集是正确的版本。这是解决 DLL 地狱问题的有效途径之一。

    如果只要求做数字签名,您可以忽略强签名,只是在 Post-Build 中用 Signtool 就可以。但我还是强烈建议您将每一个 Pruduction 质量的程序集强签名。强签名阻止一些未经授权的程序集被加载,对应用程序的安全性有显著的提高。

    有关强签名的问题,可以参考 MSDN 的 Strong Naming, Strong Sign, 或者 sn.exe。


    Mark Zhou
    • 已标记为答案 liubin 2011年5月17日 8:43
    2011年5月11日 6:50
  • 谢谢,我明白了。就是在“签名”页签里面,是强签名;

    如果只是想数字签名,就到生成后事件里面自己写signtool的命令行就可以了。谢谢!

     

    不过我实际尝试了一下,发现我在“生成后事件”中输入:

    signtool sign /f D:\xxx.pfx /p password /t http://timestamp.wosign.com/timestamp $(TargetPath)XXX.exe

    会有如下报错:

    EXEC : SignTool error : File not found: C:\Users\aluzi\Documents\Visual
    我的路径是这样的:

    C:\Users\aluzi\Documents\Visual Studio 2008\Projects\....

    看来signtool在“Visual Studio 2008”这个目录上出错了。它不能识别带有空格的目录?

     

    我现在只能够写死为:

    signtool sign /f D:\xxx.pfx /p password /t http://timestamp.wosign.com/timestamp C:\Users\aluzi\Documents\Visual~1\Projects\myproject\myproject\bin\Release\XXX.exe


    da jia hao!
    2011年5月11日 8:36