首先用sdk的sn工具或者makecert工具生成公钥和密钥,推荐makecert,做自己的证书,我做了一个受信任的根证书放在受信任的根证书颁发机构,用这个根证书颁发了一个下级证书放在个认证书里。把这两个证书都保存起来,平时给程序签名就用这个子证书就行了。以后都用这一个,显得正规点。
程序里工程属性-签名把那clickonce和程序清单签名都选上,时间戳用这个http://timestamp.wosign.com/timestamp
2个都从文件选择,这里用刚才子证书的那个带密钥的pfx,需要填入密码。
这样编译后不能防篡改,因为微软有个跳过机制,这样只有生成dll放到gac才会检查强名称是否匹配,而一个单独的exe是没用的,修改里面一点东西后还是可以执行。微软说可以在app.config里加入一条强制检查,那样是行了只要修改exe就没法执行,但是只有exe一直带着那个app.config放在同一目录才行,如果单独把exe拿出来就不行了。
怎么把那句话弄到exe里呢,我费了半天劲,终于想到了一个办法,平时只注意功能实现了,没想到.net里的安全机制这么复杂。
此方法无论是console的还是winform的,无论2.0 3.0 3.5 4.0通用。