对dll进行数字android签名不一致,然后用exe检查数字android签名不一致,如果android签名不一致一致运行程序,否则报错

如果您喜欢电脑知识网,请点击“分享按钮”!
学电脑基础知识,计算机基础知识,电脑技巧就来电脑知识网大全!
signtool对.exe应用程序数字证书签名方法
时间: 20:00 来源:原创 作者:电脑知识网 阅读:次
电脑知识网小编给大家分享如何使用signtool对.exe应用程序数字证书签名方法。
为什么要给应用程序签名数字证书?
1.减少杀毒软件误报。
2.让我们的软件更权威。
3.防止windows系统打开软件时提示无证书,是否要继续打开的提示。
使用signtool对.exe应用程序数字证书签名方法:
1.首先下载:signtool 并减压到电脑windows 系统用户目录,减压到windows 系统用户目录的好处是,直接使用CMD命令就可以制作证书。
2.点击:开始--运行或者直接使用 Windows按键+R呼出运行窗口--输入:CMD ,然后输入以下代码:
makecert /sv &pczhishiOk.PVK& /n &CN=,E=,O=电脑知识网& pczhishi.cer
pczhishiOK.pvk&& 是证书密钥文件
CN= 这个随意填写
E= 这个是E-mail
O=电脑知识网& 这个可以写公司名字
pczhishi.cer& 这个是生成的数字证书文件名
输入命令后根据提示,填写数字证书密码,以备后面对.exe应用程序签名时使用,密码会确认两次,制作成功会提示:Succeeded,这时目录下就会生成:pczhishi.cer和pczhishiOk.PVK两个文件。
3.在打开运行:signcode.exe对我们的.exe应用程序签名数字证书,点击下一步:选择要签名的应用程序.exe文件--自定义--从文件选择--类型选择X.509证书(.cer或者.crt)文件就可以找到我们生成的证书文件--点击浏览选择磁盘上的密钥文件--输入先前设定的密码--算法随便选择,可以是md5,可以是shal--下一步--输入描述和web位置--添加时间戳URL:,最后再输入一次密码确认就完成所有操作会提示签名成功!
4.我们再在已经签名好数字证书的应用程序上点击鼠标右键--属性就会看到有数字签名了。
点脑知识网小编提示:以上是制作免费个人签名证书方法,最好还是申请付费的数字签名证书,这样更权威,不过用免费的总比没有好!Azure/C++/C#/Java/Asp.net/JavaScript/Html - MFC/COM/ActiveX/eclipse/Web
【转载】/itech/archive//2110924.html
Authenticode : 这里翻译为数字认证代码。 code sign : 字面的翻译为代码签名,但是通常的我们称为数字签名,以下的文中均称为数字签名。
一 数字认证码如果你是软件开发人员,你可能已经知道windows系统和一些浏览器(例如IE,Firefox)使用一种称为数字认证代码的技术来标识软件的发行商,来检查软件没有被病毒影响。如果你的软件没有用数字认证代码签名,用户将会收到一个警告&此软件发行商不能被成功的验证,你是否要继续运行此软件&,很多的用户为了安全起见将放弃对此软件的使用。 如果你的软件是提供给专业的人员使用,结果肯能会更糟。许多公司的IT安全策略禁止没有用数字认证码签名的软件的运行。 同时微软Windows也使用数字签名证书来判断潜在的恶意软件。如果你的setup.exe没有进行数字认证证书的签名,你的软件的名誉将遭受损害。 在Vista系统增加UAC之后,情况变的更糟,如果你的软件没有使用数字认证证书签名,且在运行时需要管理员的权限,则会出现警告对话框&不可识别的程序想访问你的计算机&,这个时候很多的用户可能认为是病毒,会禁止使用你的软件。 二 数字认证码的原理
数字签名代码是一种技术,它使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性。数字签名使用公共密匙签名书法被创建,它使用两种不同的密匙:公共密匙和私有密匙,我们称其为密匙对。私有密匙一般为拥有者所有,公有密匙对所有的人都可见。
数字签名的过程本质上为:
签名软件对要签名的软件创建hash;
使用发布者的私有密匙来加密软件的hash;
被加密的hash和发布者的数字证书被插入到要签名的软件;
数字签名的验证过程本质上为:
用户对要验证的软件创建hash;
使用发布者的公共密匙来解密被加密的hash;
比较解密的hash和新获得的hash,如果匹配说明签名是正确的,软件没有被修改过;
三 数字签名数字签名是对软件进行标识的一个流程,它通过对软件增加了发布商的信息来检查软件在发布后是否被修改或受病毒影响。在软件出售前进行签名已经成为了行业范围的专业实践。随着用户的安全意识的提高,现在越来越多的用户限制下载未签名的软件,因此作为专业的软件公司,在软件出售前进行签名已经成为必不可少的一步。 要进行数字签名,需要以下准备:1)数字证书和密码;2)数字签名工具;3)时间戳服务器的URL地址;
四 数字签名工具数字签名工具, 微软提供了两套数字签名工具,
1)signcode.exe, 从1998年开始使用,随.NET Framework SDK发布。
signcode.exe 数字签名工具
makecert.exe 创建数字证书
cert2spc.exe
将数字证书转化为软件发布者证书格式
2)signtool.exe,随visualstudio 2005及其以后的版本发布。
signtool.exe 数字签名工具
makecert.exe 创建数字证书
cert2spc.exe 将数字证书转化为软件发布者证书格式
pvk2pfx.exe(pvkimprt.exe) 将私有的密匙和软件发布者证书合并为pfx文件,此文件将被signtool.exe使用
上面2中工具的不同是signcode.exe需要输入私有密匙和软件发布者证书(pvk和spc文件),signtool.exe只需要输入由pvk和spc合并产生的一个个人信息交互文件(pfx)。
五 获得数字证书
数字证书,你可以创建自己的数字证书来测试数字签名的流程,但是正式的软件发布,你需要向可信赖的证书颁发机构购买数字证书和密码,例如你可以向以下的证书机构购买Comodo, Globalsign, Thawte and Verisign。
创建自己的数字证书(用来测试)
使用如下命令来创建自己的数字证书:makecert.exe -sv mykey.pvk -n "CN=Acme Software Inc." mycert.cer你可以将Acme Software Inc.替换为你自己公司的名字。如果mykey.pvk不存在的话,你会要求输入私有密匙的密码,密码可以为空。安全起见最好设置密码,否则别人拿到你的私有密匙后就可以签名了。在上面的命令后,产生了2个文件mykey.pvk和mycert.cer。接下来需要将数字证书(cer)转化为软件发布商证书(spc),命令如下:cert2spc.exe mycert.cer mycert.spc此过程中需要输入私有密匙的密码,创建完成后应该会生成mycert.spc文件,当数字签名时mycert.cer文件是不需要的。
六 对软件数字签名 时间戳服务器,你可以选择下列之一, -
1)使用signcode.exe,如下:signcode.exe -t &timestamp URL& -spc mycert.spc -v mykey.pvk "&file to be signed&"进行数字签名的文件可以是.exe, .dll, .ocx 或者是其他的可执行文件。
2)使用signtool.exe,如下:
如果你没有pfx文件,需要使用以下的命令来将pvk和spc文件合并为pfx,如果没有设置密码的话必须使用pvkimprt.exe来合并。pvk2pfx.exe -pvk mykey.pvk -pi &password& -spc mycert.spc -pfx mycert.pfx -po &password&pvkimprt.exe -pfx mycert.spc mycert.pvksigntool.exe sign /f mycert.pfx /p &password& /t &timestamp URL& /v "&file to be signed&" 以下是使用signtool.exe签名的一个实例: signtool.exe sign /f mycert.pfx /p &password& /t &timestamp URL& /v "&file to be signed&" Here is the Sample Output:
The following certificate was selected:
Issued to: SID Software Inc.
Issued by: Thawte Code Signing CA
Expires: 10/16/:15 AM
SHA1 hash: B9H456ED9AV1535G12E Done Adding Additional Store Attempting to sign: jservice.exe
Successfully signed and timestamped: jservice.exe Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
Code-Signing Best Practices :
/en-us/windows/hardware/gg487309.aspxClickOnce是.NET用于Windows应用程序的一种便捷部署方式。不过由于便捷,导致缺少自定义操作的空间。比如需要对通过ClickOnce部署的应用程序的主程序(exe文件)进行数字签名就比较麻烦。下面简单分享下,在既能获得ClickOnce的便捷功能(包括VS自动生成ClickOnce部署包)的同时,又能方便的对应用程序进行签名。
1,为什么要进行数字签名
为了保证系统的安全,现在Windows(比如Windows 8)对于通过网络上下载的应用程序的执行文件都会首先阻止,并提示用户是否要运行。这个时候,同时会提示这个应用程序的发行者。如果一个没有进行数字签名的应用程序,这个时候发行者就为&未知&,签名后,就可以告知用户这个应用程序是由你提供的。在这里,数字签名就是保证这个应用程序是由你发行,并未被第三方更改的。
上面这种情况还好,很多时候,如果你安装了360之类的软件,对于未签名的应用程序,大部分情况是阻止其运行的。如果没有进行数字签名,那么对用户会造成极大困扰。
对执行文件进行数字签名还有诸多好处,我就不一一例举。现在购买一个代码签名的证书也不算贵,对于类似我们这种发行客户端应用程序的厂商而言,是很有必要购买一个证书的。
2,几个误解:程序集强签名、ClickOnce清单签名、安装程序签名
程序集强签名
.NET里面有个概念&&程序集强签名。这个只是.NET可以使用这个强签名文件(snk)来对程序集进行签名,保证程序集本身不被篡改。以便保证其他人引用的这个程序集是你开发的。MSDN这样描述:
程序集签名(也称为强名称签名)赋予应用程序或组件一个唯一标识,其他软件可用该标识来显式标识和引用该应用程序或组件。强名称由程序集的简单文本名、版本号、区域性信息(如果提供)以及公钥/私钥对组成。
例如,强命名使应用程序作者和管理员可以指定用于共享组件将使用的一种准确的服务的版本。这使不同的应用程序指定不同的版本,而不会影响其他应用程序。 此外,还可以使用组件的强名称作为安全证据生成两个组件之间的信任关系。
要对程序集进行强签名,无需使用购买的代码签名数字证书,用.NET提供的sn工具就可以生成snk文件,你只要保存好这个文件,就可以保证你的程序集的签名。
但是,程序集强签名并不等于执行文件的数字签名(就算这个程序集是一个exe文件)。并且MSDN中明确说不应该对exe文件进行强签名(虽然我是这样做的)。文件的数字签名实际上是在文件系统级别对任何文件附加一个签名,告知操作系统此文件的发行者是谁。即可以在文件的属性对话框中,看到&数字签名&这项选项卡。
ClickOnce清单签名
另外,对于ClickOnce的应用程序清单(即app.exe.manifest文件)和部署清单(即app.application文件)进行签名。这样的签名实际上保证客户端正确识别ClickOnce部署包的发行者以及完整性,保证不被第三方篡改。如果不对ClickOnce清单进行签名的话,那么在安装(即运行app.application文件)的时候,安装程序就无法显示发行者,在某些企业环境下或某些安全软件下,就可能阻止application文件的运行(尤其你的应用程序需要获取Full Trust权限的时候更是如此)。但是,对于ClickOnce清单进行签名并不会对程序的执行文件进行签名(虽然同样需要代码签名数字证书)。
安装程序签名
使用过ClickOnce部署的同学,应该知道VS在生成ClickOnce部署包的时候,会同时生成一个setup.exe文件。同样,ClickOnce不会自动对这个按照执行文件进行签名。为了保证这个setup.exe能顺利的在客户端机器上运行,最好还是对其进行数字签名。MSDN文档中就有一节内容专门讲述了这个问题&&&How to: Sign Setup Files with SignTool.exe (ClickOnce)&。同样,就算setup.exe被签名了,应用程序真正的执行文件还是需要签名的。
当然,正因为有了SignTool这个工具。
3,失败尝试:Post-Build Events
由于我生成ClickOnce部署包,是完全依赖于VS来自动生成的。所以为了最大限度的保证这种自动化,我首先尝试在Post-Build Events中对编译出来的exe程序集(bin文件夹内的)进行签名。不过后来发现,ClickOnce是从obj文件夹里面复制文件;随后对obj中的程序集进行签名,结果ClickOnce包含的程序集还是未签名的。我估计,ClickOnce在打包前会对程序集进行hash检查,如果hash不对,就会自动全新编译(跳过Build Events的执行)。经过几次尝试后,最后还采用ClickOnce打包完成后,再来签名的方法。
4,最终做法:用CMD脚本对ClickOnce部署包进行处理
在重新复习了ClickOnce的一些重打包的命令之后,编写了如下命令行脚本,可以对ClickOnce打包好的部署包中的exe文件进行签名:
SET _dir=%CD%
ECHO %_dir%
rename eBalance.exe.deploy eBalance.exe
signtool.exe sign /sha1 F0B5D453FE821F3DA370B87933BXXX /t /authenticode eBalance.exe
mage -update eBalance.exe.manifest
mage -sign eBalance.exe.manifest -ch F0B5D453FE821F3DA370B87933BXXX -ti /authenticode
rename eBalance.exe eBalance.exe.deploy
signtool.exe sign /sha1 F0B5D453FE821F3DA370B87933BXXX /t /authenticode setup.exe
mage -update eBalance.application -appm "%_dir%\eBalance.exe.manifest"
mage -sign eBalance.application -ch F0B5D453FE821F3DA370B87933BXXX -ti /authenticode
xcopy eBalance.application "%_dir%\eBalance.application"
对上面的脚本简单解释一下:
5行,由于我打包部署的时候,包含了deploy后缀,所以先进行了一个重命名操作
7行,对exe执行文件进行签名,使用的是我安装在本机中的签名证书
9行,更新应用程序清单(即这个应用程序会包含哪些程序集、资源和其他文件)
11行,对应用程序清单重新签名
13行,把exe文件改回deploy后缀,以便接下来更新部署清单的时候能正常执行
17行,对setup.exe进行签名(可选)
19行,更新部署清单,且指明对应的应用程序清单是那个
21行,对部署清单重新签名
23行,用更新且重新签名的部署清单覆盖具体版本目录里面的部署清单
这段脚本需要进入到具体的部署版本目录里(比如:publish\Application Files\eBalance_4_1_13054_7),才能执行。
5,可选做法:手动生成ClickOnce部署包
当然,通过利用signtool、mage工具,你可以编写一段更加复杂的脚本(甚至使用PowerShell),来完全用脚本执行签名、生成相关清单,打包的工作。具体可以参考MSDN文档:
阅读(...) 评论()通常的我们在软件发布前要对binary(dll,exe)进行数字签名,数字签名可以标识软件的发布商,也可以通过数字签名来检查此软件是否被修改或受病毒影响。&在需要检查某个文件的数字签名时,通常情况下总是需要打开文件的属性对话框,切换到“数字签名”对话框,然后才能在这里查看到相关的数字签名信息,如下图:sigcheck是来自sysinternals的数字签名验证工具,可以查看指定的文件或目录下的哪些文件没有数字签名。 此工具是命令行工具,可以用来批量检查某个文件夹下相关文件的数字签名。&帮助如下:&&使用如下:对目录C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE及子目录下的所有的binaries检查数字签名,将没有签名的文件输出到sigcheck.txt中。 sigcheck -s -q -e -u "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE" & sigcheck.txt&运行后的sigcheck.txt类似于如下:& c:\program files (x86)\microsoft visual studio 10.0\common7\ide\coloader80.tlb:&& &Verified:&& &Unsigned&& &File date:&& &12:17 AM 3/18/2010&& &Publisher:&& &Microsoft Corporation&& &Description:&& &VS Loader Type Library&& &Product:&& &Microsoft?Visual Studio?2010&& &Version:&& &10.0.30319.1&& &File version:&& &10.0.30319.1 built by: RTMRelc:\program files (x86)\microsoft visual studio 10.0\common7\:&& &Verified:&& &Unsigned&& &File date:&& &3:04 AM 3/18/2010&& &Publisher:&& &Microsoft Corporation&& &Description:&& &Microsoft Visual Studio Command Line&& &Product:&& &Microsoft?Visual Studio?2010&& &Version:&& &10.0.30319.1&& &File version:&& &10.0.30319.1 built by: RTMRelc:\program files (x86)\microsoft visual studio 10.0\common7\ide\PrivateAssemblies\Microsoft.mon.tlb:&& &Verified:&& &Unsigned&& &File date:&& &4:28 AM 3/18/2010&& &Publisher:&& &Microsoft Corporation&& &Description:&& &Microsoft.mon.dll&& &Product:&& &Microsoft?Visual Studio?2010&& &Version:&& &10.0.30319.1&& &File version:&& &10.0.30319.1 built by: RTMRelc:\program files (x86)\microsoft visual studio 10.0\common7\ide\PrivateAssemblies\Microsoft.VisualStudio.OLE.Interop.dll:&& &Verified:&& &Unsigned&& &File date:&& &6:22 PM 11/20/2009&& &Publisher:&& &Microsoft Corporation&& &Description:&& &&& &Product:&& &Microsoft?Visual Studio .NET&& &Version:&& &7.10.6070&& &File version:&& &7.10.6070&完!&
阅读(...) 评论()503: Service Unavailable
503: Service Unavailable
访问太频繁了,服务器要炸。

我要回帖

更多关于 apk签名不一致怎么办 的文章

 

随机推荐