资讯专栏INFORMATION COLUMN

用shell脚本生成.x509.pem 和.pk8 文件并签名

jhhfft / 1337人阅读

摘要:文章末有完整脚本生成的文件生成文件的路径文件别名密码加密方式有效时间把需要的国家地址公司名等信息一次写入使用的生成文件。

用shell脚本生成.x509.pem 和.pk8 文件并signed apk。


文章末有完整脚本

-----生成keystore 的文件

keytool -genkey -v -keystore ${KEY_STORE_PATH} -alias ${ALIASES} -storepass ${PASS} -keypass ${PASS} -keyalg RSA -validity 20000 -dname "CN="Android", OU="xxx-shanghai", O="xxx", L="Mountain View", ST="California", C="US""
-keystore 生成文件的路径 -alias 文件别名 -storepass -keypass 密码 -keyalg 加密方式          -validity 有效时间 -dname 把需要的国家 地址 公司名等信息 一次写入
使用 java sdk 的keytool 生成keystore 文件。

-----把keystore文件转换为pkcs12格式

keytool -importkeystore -srckeystore ${KEY_STORE_PATH} -destkeystore ${DEST_KEY_STORE_PATH} -srcstoretype JKS -deststoretype PKCS12 -deststorepass ${PASS} -srcstorepass ${PASS} -destkeypass ${PASS}
-srckeystore keystore文件路径 -destkeystore 生成的pkc12文件路径

-----把pkcs12 转成pem,方便可以通过文本方式查看

openssl pkcs12 -in ${DEST_KEY_STORE_PATH} -nodes -out ${DEST_TMP_RSA_PATH} -password pass:${PASS}
-in pkcs12 路径, -out 生成的pem 路径  password pass: 密码

-----截取pem文件生成.X509.pem .rsa.pem文件

# 1.获取 pkcs12.rsa.pem 文件  PRIVATE KEY 起始行数
# 因为不同环境生成的私钥头不同(BEGIN RSA PRIVATE KEY,BEGIN PRIVATE KEY ) 所以这里加个判断
private_key_begin=`grep "BEGIN RSA PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`

if [ $? -ne 0 ]; then
   private_key_begin=`grep "BEGIN PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`
   private_key_end=`grep "END PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`
else
   private_key_end=`grep "END RSA PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`
fi

# 2.截取pkcs12.rsa.pem 文件 并生成PRIVATE.rsa.pem文件
sed -n ${private_key_begin%%:*},${private_key_end%%:*}p ${DEST_TMP_RSA_PATH} >> ${PRIVATE_RSA}

# 1.获取 pkcs12.rsa.pem 文件  CERTIFICATE KEY 起始行数
cert_509_begin=`grep "BEGIN CERTIFICATE" ${DEST_TMP_RSA_PATH} -n`
cert_509_end=`grep "END CERTIFICATE" ${DEST_TMP_RSA_PATH} -n`

# 2. 截取pkcs12.rsa.pem 文件 并生成CERT_X509.X509.pem文件
sed -n ${cert_509_begin%%:*},${cert_509_end%%:*}p ${DEST_TMP_RSA_PATH} >> ${CERT_X509}

-----私钥转pk8格式

openssl pkcs8 -topk8 -outform DER -in ${PRIVATE_RSA} -inform PEM -out ${PK8_PATH} -nocrypt

-----signed apk

java -jar ${SIGNED_JAR} ${CERT_X509} ${PK8_PATH} ${APK} ${SIGNED_APK}
所需参数 signed.jar x509.pem pk8.rsa.pem apk signed_apk  路径

-----删除不需要的文件

rm $KEY_STORE_PATH $DEST_KEY_STORE_PATH $DEST_TMP_RSA_PATH $PRIVATE_RSA

完整脚本

#!/bin/sh
KEY_STORE_PATH="$4"/app_"$1".keystore

DEST_KEY_STORE_PATH="$4"/tmp_"$1".p12

DEST_TMP_RSA_PATH="$4"/tmp_"$1".rsa.pem

PRIVATE_RSA="$4"/private_"$1".rsa.pem

CERT_X509="$4"/cert_"$1".x509.pem

PK8_PATH="$4"/private_"$1".pk8



ALIASES="$1"

PASS=xxx"$1"

APK="$4"/"$2"

SIGNED_APK="$4"/"$3"

SIGNED_JAR="$4"/signapk.jar

if [ $# != 4 ] ; then
    echo "$0 Need to be: uuid, apk, sigend_apk , path(signapk.jar to be in the path, The signed files generated will also be in this path)"
    exit 1;
fi
keytool -genkey -v -keystore ${KEY_STORE_PATH} -alias ${ALIASES} -storepass ${PASS} -keypass ${PASS} -keyalg RSA -validity 20000 -dname "CN="Android", OU="xxx-shanghai", O="xxx", L="Mountain View", ST="California", C="US""

keytool -importkeystore -srckeystore ${KEY_STORE_PATH} -destkeystore ${DEST_KEY_STORE_PATH} -srcstoretype JKS -deststoretype PKCS12 -deststorepass ${PASS} -srcstorepass ${PASS} -destkeypass ${PASS}

openssl pkcs12 -in ${DEST_KEY_STORE_PATH} -nodes -out ${DEST_TMP_RSA_PATH} -password pass:${PASS}

private_key_begin=`grep "BEGIN RSA PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`

if [ $? -ne 0 ]; then
   private_key_begin=`grep "BEGIN PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`
   private_key_end=`grep "END PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`
else
   private_key_end=`grep "END RSA PRIVATE KEY" ${DEST_TMP_RSA_PATH} -n`
fi

sed -n ${private_key_begin%%:*},${private_key_end%%:*}p ${DEST_TMP_RSA_PATH} >> ${PRIVATE_RSA}

cert_509_begin=`grep "BEGIN CERTIFICATE" ${DEST_TMP_RSA_PATH} -n`
cert_509_end=`grep "END CERTIFICATE" ${DEST_TMP_RSA_PATH} -n`

sed -n ${cert_509_begin%%:*},${cert_509_end%%:*}p ${DEST_TMP_RSA_PATH} >> ${CERT_X509}

openssl pkcs8 -topk8 -outform DER -in ${PRIVATE_RSA} -inform PEM -out ${PK8_PATH} -nocrypt

java -jar ${SIGNED_JAR} ${CERT_X509} ${PK8_PATH} ${APK} ${SIGNED_APK}


if [ ! -f $SIGNED_APK ]; then
     echo "Failed to sign apk"
    exit 1;
fi

rm $KEY_STORE_PATH $DEST_KEY_STORE_PATH $DEST_TMP_RSA_PATH $PRIVATE_RSA

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75927.html

相关文章

  • Android签名生成互转

    摘要:原文链接的签名有两种方式,一种使用提供的工具签名文件,另一种是自己提供的通过密钥和证书两个签名文件完成签名。下文将这两个文件简称为签名二将签名转换为签名库接下来我们解决百度渠道的签名问题,第一步就需要将我们的签名转换为签名。原文链接:http://blog.votzone.com/2018/05/05/android_signature.html   Android 的签名有两种方式,一种使...

    tunny 评论0 收藏0
  • Android安全开发之通签名风险

    摘要:通用签名风险简介应用签名机制阿里聚安全漏洞扫描器有一项检测服务是检测的通用签名风险。阿里聚安全对开发者建议上线前用阿里聚安全的漏洞扫描器进行一下检查。阿里聚安全的漏洞扫描器目前已能检查出通用签名风险,未来可能增加检测证书是否泄漏风险。 1 通用签名风险简介 1.1 Android应用签名机制 阿里聚安全漏洞扫描器有一项检测服务是检测APP的通用签名风险。Android系统要求安装的应用...

    BoYang 评论0 收藏0
  • APK多开原理

    摘要:去年给运营同事解释了最简单的多开原理,最简单的方式通过修改包名达到多开的目的。打开应用获取包名后面为版本号利用反编译查看文件利用反编译代码多开制作流程上面主要是介绍了多开的原理,制作的过程是基于拿到源码的情况下。 去年给运营同事解释了最简单的多开原理,最简单的方式通过修改包名达到多开的目的。很多 APK 现在已经不能通过这个方式达到多开了,虽然 LOW ,但是对了解多开原理还是有点用的...

    goji 评论0 收藏0
  • Android程序逆向分析

    摘要:最近在看软件俺去与逆向分析,所以把自己的实践过程整理一下。传送门程序逆向分析分析程序是开发程序的一个逆向过程。安装测试安装签名好后的,输入原来测试的用户名和注册码。 最近在看《Android软件俺去与逆向分析》,所以把自己的实践过程整理一下。实例选自书中的第二章节,一个最简单的破解案例。分析Android程序是开发Android程序的一个逆向过程。在分析前必须要了解Android开发的...

    andong777 评论0 收藏0
  • 手把手教你逆向分析 Android 程序

    摘要:我们看一下,反编译后的关键代码可以看到这是一个参数为,返回值为名叫的函数,当输入为的时候才返回。我们先通过方法拿到正版手机暴风影音的签名,然后在反编译后的代码中搜索一下这个值。看到这个函数发现就和上例中的函数类似了,改一下返回值为就好了。 很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下。 showImg(h...

    edagarli 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<