IOS证书和Android签名统一管理方案

背景

由于在工作中经常需要管理多台机器的ios证书及android签名,假设全部都是手动来操作完成,那将耗费大量时间,本文旨在提供一种较为完整的方案来方便快捷的管理多台机器的ios证书及android签名。

IOS证书管理

IOS证书管理分为命令行安装,描述文件解析&安装,证书过期时间预警等基础功能

IOS证书命令行安装方式(security)

首先介绍证书管理的基础-安装,通过security命令进行p12证书的安装
安装命令:

sudo security import [p12证书文件所在路径] -k /Library/Keychains/System.keychain -P [p12证书安装密钥] -T /usr/bin/codesign

安装命令解析,上述命令主要把证书安装在系统下,需要sudo权限,并且 -T 设定 /usr/bin/codesign是有权限使用该证书的,如果想把证书安装在登录下,请使用如下两条命令

security unlock-keychain -p  [登录用户密码] /Users/[用户名]/Library/Keychains/login.keychain

security import [p12证书文件所在路径] -k /Users/[用户名]/Library/Keychains/login.keychain -P [p12证书安装密钥] -T /usr/bin/codesign

多台机器同时安装p12 + 授权文件脚本:

  #!/bin/bash
 
 #同局域网多台机器ip,机器之前预先设置互信+免密登录
 mac_arr=(A,B,C,D)
 
 CODESIGN_FILE_NAME=$1
 PROVISION_FILE_NAME=$2
 CODESIGN_PASSWORD=$3
 
 #安装provision file
 open ${PROVISION_FILE_NAME}
 
 sudo security import ${CODESIGN_FILE_NAME} -k /Library/Keychains/System.keychain -P ${CODESIGN_PASSWORD} -T /usr/bin/codesign

 for var in ${mac_arr[@]};
 do
     #先拷贝必要的证书和provision file到指定机器的指定目录
     scp ${CODESIGN_FILE_NAME} [登录用户名]@xxx.xxx.xxx.${var}:/Users/[登录用户名]/codeSignFile
     scp ${PROVISION_FILE_NAME} [登录用户名]@xxx.xxx.xxx.${var}:/Users/[登录用户名]/codeSignFile
     ssh [登录用户名]@xxx.xxx.xxx.${var} "cd /Users/[登录用户名]/codeSignFile && open ${PROVISION_FILE_NAME} && sudo security import ${CODESIGN_FILE_NAME} -k /Library/      Keychains/System.keychain -P ${CODESIGN_PASSWORD}   -T /usr/bin/codesign"  #双引号里面加入想要执行的命令
 done

解析描述文件获取AppId, 证书信息,过期时间

通过获取证书信息+过期时间等,可以用来校验证书是否已经装上,证书是否即将过期等功能,需要的可自行设计实现

解析命令

security cms -D -i [描述文件] > [输出plist文件]

MAC中描述文件被安装在如下目录:
/Users/[登录用户名]/Library/MobileDevice/Provisioning Profiles
重点关注如下几个项的内容:

<key>application-identifier</key> //对应app bundle id
<key>ExpirationDate</key> //证书过期时间
<key>Name</key> //证书文件名
<key>UUID</key>  //UUID是授权文件安装在目录的文件名UUID.mobileprovision

获取登录/系统keychain下所有已安装的证书

命令如下:

security find-identity -v codesigning /Users/[登录用户名]/Library/Keychains/login.keychain

删除登录/系统keychain下已安装的证书

命令如下:

security delete-certificate -Z SHA1

注:将SHA1替换成证书的sha1,sha1的值,可以通过find-identity命令看到,它是一个40位的随即字符串

Android证书管理

Android的证书管理起来就比较方便,主要是统一生成,并且方便提供给同事MD5,SHA-1,别名等相关信息

Android证书命令行生成方式

使用keytool命令生成keystore签名

keytool -genkey -alias [别名] -keyalg RSA -validity 40000 -storepass  [密钥] -keypass  [密钥]  -dname "CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=86"   -keystore [生成文件名]

获取签名MD5,SHA-1,别名等信息命令

keytool -list -storepass  [密钥]  -v -keystore  [签名文件名] | grep 'SHA1'
keytool -list -storepass  [密钥]  -v -keystore  [签名文件名] | grep 'MD5'
keytool -list -storepass  [密钥]  -v -keystore  [签名文件名] | grep '别名'

推荐阅读更多精彩内容