android的标准签名key有:
testkey
media
latform
hared
以上的四种,可以在源码的/build/target/product/security里面看到对应的密钥,其中shared.pk8代表私钥,shared.x509.pem公钥,一定是成对出现的。
其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。
而如果设置成:
LOCAL_CERTIFICATE := platform
就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="android.uid.system"才有用!
在/build/target/product/security目录下有个README,里面有说怎么制作这些key以及使用问题(android4.2):
从上面可以看出来在源码下的/development/tools目录下有个make_key的脚本,通过传入两个参数就可以生成一对签名用的key。
其散州中第一个为key的名字,一般都默认成android本身有的,因为很多地方都默认使用了这些名字,我们自定义的话只需要对第二个参数动手脚,定义如下:
C --->Country Name (2 letter code) ST --->State or Province Name (full name) L --->Locality Name (eg, city) O --->Organization Name (eg, company) OU --->Organizational Unit Name (eg, section) CN --->Common Name (eg, your name or your server’s hostname) emailAddress --->Contact email addre
另外在使冲做蔽用上面的make_key脚本生成key的过程中会提示输入password,我的处理是不输入,直接enter,不要密码!后面解释,用自定义的key替换/security下面的。
可以看到android源码里面的key使用的第二个参数就是上面README里面的,是公开的,所以要release版本的系统的话,肯定要有自己的签名key才能起到一个安全控制作用。
在上面提到如果apk中的编译选项LOCAL_CERTIFICATE没有设置的话,就会使用默认的testkey作为签名key,我们可以修改成自己想要的key,按照上面的步骤胡汪制作一个releasekey,修改android配置在/build/core/config.mk中定义变量:
在主makefile文件里面:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_VERSION_TAGS += release-key
这样的话默认的所有签名将会使用releasekey。
修改完之后就要编译了,如果上面的这些key在制作的时候输入了password就会出现如下错误:
我在网上找到了合理的解释:
其实会出现这个错误的最根本的原因是多线程的问题。在编译的时候为了加速一般都会执行make -jxxx,这样本来需要手动输入密码的时候,由于其它线程的运行,就会导致影响当前的输入终端,所以就会导致密码无法输入的情况!
再编译完成之后也可以在build.prop中查看到变量:
这样处理了之后编译出来的都是签名过的了,系统才算是release版本
我发现我这样处理之后,整个系统的算是全部按照我的要求签名了。
网上看到还有另外的签名release办法,但是应该是针对另外的版本的,借用学习一下:
make -j4 PRODUCT-product_modul-user dist
这个怎么跟平时的编译不一样,后面多了两个参数PRODUCT-product_modul-user 和 dist. 编译完成之后回在源码/out/dist/目录内生成个product_modul-target_files开头的zip文件.这就是我们需要进行签名的文件系统.
我的product_modul 是full_gotechcn,后面加“-user”代表的是最终用户版本,关于这个命名以及product_modul等可参考http://blog.csdn.net/jscese/article/details/23931159
编译出需要签名的zip压缩包之后,就是利用/security下面的准备的key进行签名了:
./build/tools/releasetools/sign_target_files_apks -d /build/target/product/security out/dist/full_gotechcn-target_files.zip out/dist/signed_target_files.zi
签名目标文件 输出成signed_target_files.zi
如果出现某些apk出错,可以通过在full_gotechcn-target_files.zip前面加参数"-e =" 来过滤这些apk.
然后再通过image的脚本生成imag的zip文件,这种方式不适用与我目前的工程源码,没有做过多验证!
Android签名机制可划分为两部分:(1)ROM签名机制;(2)第三方APK签名机制。
Android APK实际上是一个jar包,而jar包又是一个zip包。APK包的签名实际上使用的是jar包的签名机制:在zip中添加一个META的子目录,其中存放签名信息;而签名方法是为zip包中的每个文件计算其HASH值,得到签名文件(*.sf),然后对签名文件(.sf)进行签名并把签名保存在签名块文件(*.dsa)中。
在编译Android源码生成ROM的过程中,会使用build/target/product/security目录中的4个key(media, platform, shared, testkey)来对apk进行签名。其中,*.pk8是二进制形式(DER)的私钥,*.x509.pem是对应的X509公钥证书(BASE64编码)。build/target/product/security目录中的这几个默认key是没有密码保护的,只能用于debug版本的ROM。
要生成Release版本的ROM,可先生成TargetFiles,再使用带密码的key对TargetFiles重新签名,最后由重签名的TargetFiles来生成最终的ROM。
可以使用Android源码树中自带的工具“development/tools/make_key”来生成带密码的RSA公私钥对(实际上是通过openssl来生成的): $ development/tools/make_key media ‘/C=CN/ST=Sichuan/L=Chengdu/O=MyOrg/OU=MyDepartment/CN=MyName’ 上面的命令将生成一个二进制形式(DER)的私钥文件“media.pk8”和一个对应的X509公钥证书文件“media.x509.pem”。其中,/C表示“Country Code”,/ST表示“State or Province”,/L表示“City or Locality”,/O表示“Organization”,/OU表示“Organizational Unit”,/CN表示“Name”。前面的命令生成的RSA公钥的e值为3,可以修改development/tools/make_key脚本来使用F4 (0×10001)作为e值(openssl genrsa的-3参数改为-f4)。
也可以使用JDK中的keytool来生成公私钥对,第三方APK签名一般都是通过keytool来生成公私钥对的。
可以使用openssl x509命令来查看公钥证书的详细信息: $ openssl x509 -in media.x509.pem -text -noout or, $ openssl x509 -in media.x509.pem -inform PEM -text -noout
还可以使用JDK中的keytool来查看公钥证书内容,但其输出内容没有openssl x509全面: $ keytool -printcert -v -file media.x509.pem
有了key之后,可以使用工具“build/tools/releasetools/sign_target_files”来对TargetFiles重新签名: $ build/tools/releasetools/sign_target_files_apks -d new_keys_dir -o target_files.zip target_files_resigned.zip 其中,new_keys_dir目录中需要有四个key(media, platform, shared, releasekey)。注意:这里的releasekey将代替默认的testkey(请参考build/tools/releasetools/sign_target_files脚本实现),也就是说,如果某个apk的Android.mk文件中的LOCAL_CERTIFICATE为testkey,那么在生成TargetFiles时是使用的build/target/product/security/testkey来签名的,这里重新签名时将使用new_keys_dir/releasekey来签名。
uild/tools/releasetools/sign_target_files_apks是通过host/linux-x86/framework/signapk.jar来完成签名的。也可以直接使用host/linux-x86/framework/signapk.jar来对某个apk进行签名: $ java -jar signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar 其中,”-w”表示还对整个apk包(zip包)进行签名,并把签名放在zip包的comment中。
对于第三方应用开发者而言,对APK签名相对要简单得多。第三方应用开发一般采用JDK中的keytool和jarsigner来完成签名密钥的管理和APK的签名。
使用keytool来生成存储有公私钥对的keystore: $ keytool -genkey -v -keystore my-release-key.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000
查看生成的密钥信息: $ keytool -list -keystore my-release-key.keystore -alias mykey -v or, $ keytool -list -keystore my-release-key.keystore -alias mykey -rfc (注:获取Base64格式的公钥证书,RFC 1421)
导出公钥证书: $ keytool -export -keystore mystore -alias mykey -file my.der (注:二进制格式公钥证书,DER) $ keytool -export -keystore mystore -alias mykey -file my.pem -rfc (注:Base64格式公钥证书,PEM)
对APK进行签名: $ jarsigner -verbose -keystore my-release-key.keystore my_application.apk mykey
验证签名: $ jarsigner -verify -verbose -certs my_application.apk
在进行Android二次开发时,有时需要把build/target/product/security下面的公私钥对转换为keystore的形式,可以参考这篇文章:把Android源码中的密码对转换为keystore的方法。
Android签名有什么作用最简单直接的回答: 系统要求的。
Android系统要求每一个Android应用程式必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程式没有经过数字签名,是没有办法安芹洞装到系统中的!
Android通过数字签名来标识应用程式的作者和在应用程式之间建立信任关系,不是用来决定终端使用者可以安装哪些应用程式。
这个数字签名由应用程式的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程式包自我认证的。
平时我们的程式可以在模拟器上安装并执行,是因为在应用程式开发期间,由于是以Debug面试进行编译的,因此ADT根据会自动用预设的金钥和证书来进行签名,而在以释出模式编译时,apk档案就不会得到自动签名,这样就需要进行手工签名。给apk签名可以带来以下好处:1.、应用程序升级:如果你希望使用者无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程式。如果你采用了不同的证书,那么系统会要求你的应用程式采用不同的包名称,在这种情况下相当于安装了一个全新的应用程式。如果想升级应用程式,签名证书要相同,包名称要相同!2、应用程式模组化:Android系统可以允许同一个证书签名的多个应用程式在一个程序里执行,系统实际把他们作为一个单个的应用程式,此时就可以把我们的应用程式以模组的方式进行部署,而使用者可以独立的升级其中的一个模组3、程式码或者资料共享:Android提供了基于签名的许可权机制,那么一个应用程式就可以为另一个以相同证书签名的应用程式公开自己的功能。以同轿知一个证书对多个应用程式进行签名,利用基于签名的许可权检查,你就可以在应用程式间以安全的方式共享程式码和资料了。不同的应用程式之间,想共享资料,或者共享程式码,那么要让他们执行在同一个程序中,而且要让他们用相同的证书签名。
word 电子签名有什么作用?对文件进行数字签名与签署纸质文件的原因大致相同。数字签名通过使用计算机加密来验证 (身份验证:验证人员和产品所宣告的身份是否属实的过程。例如,通过验证用于签名程式码的数字签名来确认软体发行商的程式码来源和完整性。)数字资讯,如文件、电子邮件和巨集。数字签名有助于确保:
真实性 数字签名有助于确保签署人的身份与宣告的相符。
完整性 数字签名有助于确保内容在经过数字签名之后未经更改或篡改。
不可否认 数字签名有助于向所有方证明签署内容的有效性。“否认”指签名人否认任何与签署内容有关系的行为。
为了确保以上各项,必须由内容建立者使用满足下列条件的签名对内容进行数字签名:
该数字签名有效 (有效:一种证书状态,根据证书颁发机构的资料库对证书进行检查后发现它是合法的、最新的,而且没有过期或被吊销。由有效证书签名且签名后没有更改的文件被视为有效文件。)。
与该数字签名关联的证书 (证书:一种证明身份和真实性的数字方法。证书由证书颁发机构颁发,而且和驾驶执照一样,也可能过期或被吊销。)有效(没有过期)。
作为释出者的签名人或公司可信 (信任:表示您是否信任证书颁发的受体(个人或组)。预设设定闭首消是“继承颁发者的信任关系”,也就是因为对颁发者(通常是证书颁发机构)的信任而信任证书。)。
与数字签名关联的证书由有声望的证书颁发机构 (CA) (证书颁发机构 (CA):一个商业组织,它颁发数字证书,跟踪被颁发证书的人员,对证书签名以验证其有效性,并跟踪被吊销或已过期的证书。) 颁发给签名释出者。
xyk签名有什么作用
相当于合同 纠纷时有依据 平常是没什么拉
手机软体签名有什么作用目前有实力的公司或确实有需要的公司会购买诺基亚的高阶权
限证书,通常是安全厂商.这类公司的软体不需要我们自签名,还有许多
软体都是一般的应用软体,和系统没什么关联,它们许可权很低,不可能存
在危险,比如网路电视软体,阅读软体,QQ,主题等都不需要签名.需要签
名的软体软体大致可分为以下几种情况:(1)随开机启动的,比如来电
通,A4自签名版(2)不要你 *** 作可以自动执行的,比如屏保程式(3)进入
系统资料夹修改的,比如大部分后期汉化的软体等,再次安装汉化补丁
时就需要签名.
可靠的电子签名有什么作用?依据《中华人民共和国电子签名法》第十四条:“可靠的电子签名与手写签名或者盖章具有同等的法律效力。”由此可见,只有使用“可靠的电子签名”,电子合同才有可能具有与纸质合同同等的法律效力,即书证效力。
C#工程档案签名有什么作用主要是防止篡改破解。比如你写的程式包括1个exe和若干dll,exe花费了很多工作量,而且上面有你们公司的标识。现在来了个黑客,反编译了某个dll,发现很轻易就改动了里面某个dll,比如注册码的dll,导致绕开了验证码。再来个黑客,把干好事的dll改成了删掉所有磁碟上档案的功能,导致使用者把你公司拉进黑名单。
如果签了名,就可以保证exe只能呼叫你自己写的dll,他们篡改了你的dll,exe会报错,报找不到dll。
驱动程式签名有什么作用啊?可以确认驱动程式与Windows 无相容性问题(不过不代表没有签名的驱动就一定不相容Windows)
新年快乐
android签名工具干什么用的给apk签名用的。但是你要有key,或者自己用eclipse生成一个。签名有一个很重要作用就是防止程式释出后被篡改签名一般用私钥,私钥签名以后会生成harsh值序列,公钥验证的时候(手机上),会根据档案内容再生成一次harsh序列,如果和apk中的harsh序列相同,说明apk释出后没有被篡改过
禁止驱动程式强制签名有什么作用没有坏处。
驱动程式签名又叫做驱动程式的数字签名,它是由微软的Windows硬体装置质量实验室完成的。硬体开发商将自己的硬体装置和相应的驱动程式交给该实验室,由实验室对其进行测试,测试合格后实验室将在其驱动程式中新增数字签名。由于数字签名是由微软完成的。
使用有数字签名的驱动程式将的好处:
安全保障 由于数字签名是针对整个驱动程式的所有软体进行的,所以在完成签名后再对驱动程式进行任何更改都会导致签名无效,这样就避免了在驱动程式中新增恶意程式码传播病毒等恶意程式的可能性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)