背景
由于在工作中经常需要管理多台机器的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 '别名'