linux访问文件mac时间长,mac通过命令行获取证书和配置文件过期时间

背景:ios打包证书的profile配置文件过期了,导致以前已经打完的测试包不能安装。所以需要加上检测机制,在打包时提示证书是否将要过期,如果要过期了给出提示

方案:

1.查找profile配置文件,查看过期时间,查看是否要过期了

2.查看证书的过期时间,查看是否将要过去了

一、查看profile的过期时间

1.查找Xcode配置的配置文件目录Provisioning Profiles下的配置文件

cd /Users/a58/Library/MobileDevice/Provisioning Profiles

获得某个配置文件的具体信息:security cms -D -i xxxx.mobileprovision

因为配置文件可能很多,所以需要找到自己要的那个配置,这里通过比对TeamName来匹配配置文件

cd /Users/a58/Library/MobileDevice/Provisioning Profiles

for file in $(ls *)

do

if [[ $(/usr/libexec/PlistBuddy -c "Print TeamName" /dev/stdin <<< $(/usr/bin/security cms -D -i ${file})) == "${TeamName}" ]]

then

#echo "I get you!"

profile=${file}

#break

#else

# echo "it's not you "

fi

done

cd的目录为xcode配置的profile配置文件目录

TeamName为要查找的证书名

2.查找匹配的证书的profile文件过期时间

以下列出了查看profile文件的三种方式,推荐第一种,其他两种不推荐

a.通过mac自带的PlistBuddy解析plist格式文件,通过security获得profile信息,然后取得key的值(推荐这种方法)

过期时间的key为ExpirationDate

ExpirationDate=`/usr/libexec/PlistBuddy -c "Print ExpirationDate" /dev/stdin <<< $(/usr/bin/security cms -D -i xxxx.mobileprovision)`

输出结果为:Sat Sep 29 11:33:00 CST 2018

---如果要查找的key为字典下的值,使用[字典所在的key:字典中要查找的key]

例如:要查找下面内容中com.apple.developer.team-identifier的值

Entitlements

keychain-access-groups

xxxx.*

get-task-allow

application-identifier

7xxx.push

com.apple.developer.team-identifier

xxxx

aps-environment

production

查找方法如下:注意冒号左右不要有空格

/usr/libexec/PlistBuddy -c "Print Entitlements:com.apple.developer.team-identifier" /dev/stdin <<< $(/usr/bin/security cms -D -i ${file})

---如果要查找的key为Array数组下的值,通过索引获得值[数组所在key:第几个值]

例如:要获得数组下第二个值

ProvisionedDevices

xxx

xxx

查找方法如下:

/usr/libexec/PlistBuddy -c 'Print ProvisionedDevices:2' /dev/stdin <<< `/usr/bin/security cms -D -i ${file}`

b.使用mobileprovision-read,可以直接通过-o输出key对应的值

首先安装mobileprovision-read

curl https://raw.githubusercontent.com/0xc010d/mobileprovision-read/master/main.m | clang -framework Foundation -framework Security -o /usr/local/bin/mobileprovision-read -x objective-c -

查找命令:

mobileprovision-read -f xxxx.mobileprovision -o ExpirationDate

c.通过security去获得文件信息,然后自己grep,不推荐

usr/bin/security cms -D -i xxxx.mobileprovision

备注:开发说通过查找UUID值更准确,生成证书和配置文件是一套的,但是因为我在证书里没有拿到这个值,所以就匹配了比较明显的TeamName

UUID

xxx

二、查找证书的过期时间

方案:查看证书需要先导出pem格式的文件,然后通过openssl工具查看证书具体信息

查看钥匙链下的所有证书:security find-identity -p codesigning /Users/a58/Library/Keychains/login.keychain

注意:第一次查看导出的时候会弹框提示是否允许,所以第一次都需要手动操作

1.导出证书为pem文件

导出证书为pem文件有两种方法,推荐第一种,第二种导出的过期时间取得好像有问题,一直是最后一个证书的过期时间

导出证书为pem文件方法1:

直接查找证书导并出为pem文件:

security find-certificate -a -c "iPhone xxxx" -p > certs.pem

说明:

1.-a -c 后面的参数为要查找的证书的名字

4682ea9e43ab6ac6078577b8f91ef9f9.png

2.-p >后面的为输出的文件名字,以.pem结尾

导出证书为pem文件方法2:

第一步:导出证书文件位.p12文件,并且指定密码

导出所有证书:

security export -f pkcs12 -k /Users/a58/Library/Keychains/login.keychain -o /opt/temp.p12 -P

指定导出某个名字的证书:

security export -f pkcs12 -k /Users/a58/Library/Keychains/login.keychain -o /opt/temp.p12 -P -t identities "iPhone xxx"

说明:

1.-t identities为自定义搜索名字,会导出包含后面字符串的证书

2.-k后面为钥匙串文件

3.-o后面为输出的.p12文件的位置及名字

4.-P为导出.p12文件时指定的密码,必须指定否则需要手动输入,这里值设置为1

第二步:将p12转换成pem文件

openssl pkcs12 -clcerts -nokeys -in temp.p12 -out cert.pem -passin pass:

说明:

1.-in后面为要转换的.p12文件

2.-out后面为要输出的pem的文件名字,以.pem结尾

3.-nokeys表示不对pem文件设置密码

4.-passin pass:xxx:输入.p12文件的密码(上一步设置的密码1)

2:查看pem证书的具体信息

openssl x509 -in cert.pem -noout -text

查看证书的过期时间:openssl x509 -in cert.pem -noout -dates

说明:

1.-in为要查看的pem证书文件名

三、比较当前时间和证书时间来判断是否过期

这里主要用了date命令,将证书的时间转换成秒,然后当前时间转换成秒后进行减法,可以计算出还有多少天过期

1.查看当天日期

date +%s

2.将证书的时间转换成秒

date -j -f "%a %b %d %T %Z %Y" "Sat Sep 29 11:33:00 CST 2018"  "+%s”

说明:-f后为转换之前时间的格式.

%a:星期

%b:月

%d:日

%T:时:分:秒

%Z:时区

%Y:年

3.计算差值是多少秒,然后换算成天

还差多少天过期=日期差/24/60/60

用OpenSSL命令行生成证书文件

用OpenSSL命令行生成证书文件 1.首先要生成服务器端的私钥(key文件): openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加 ...

Shell 命令行获取本机IP,grep的练习

Shell 命令行获取本机IP,grep的练习 在 mac 下面输入 ifconfig 或者在 linux 下面输入 ip a 就可以得到我们的网卡信息.不过通常情况下,我们需要查看的是我们的IP地址 ...

Mac 在命令行中获得Root权限

Mac 在命令行中获得Root权限 作者 firedragonpzy 13 九月, 2012 2条评论 本文为firedragonpzy原创,转载务必在明显处注明:转载自[Softeware MyZo ...

linux/mac下命令行rm回收站--rmtrash

Linux.mac的命令行下没有回收站功能,很多时候手一抖就把重要文件给 rm -fr * 了,虽然linux下有可能通过lost +found/debugfs找回,但难度也比较大,不能保证一定能够找 ...

在mac上命令行里面如何打开文本编辑器?

在mac上命令行里面如何打开文本编辑器?   在linux命令行terminal上使用gedit直接就可以打开文本文件 那么在mac上面如何操作呢? 使用:open -a TextEdit setti ...

命令行获取docker远程仓库镜像列表

命令行获取docker远程仓库镜像列表 获取思路 通过curl获取镜像tag的json串,解析后得到${image}:${tag}的格式 curl获取示例 # curl [:-s] ${API}/${ ...

python命令行获取参数

python命令行获取参数 import sys # python获取参数 input_file = sys.argv[1] output_file = sys.argv[2] print(input ...

Mac下用命令行获取苹果手机的UDID

在终端输入命令行:system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Nu ...

Mac终端命令行提示符格式更改方法

内容提要: 主要是通过~/.bash_profile文件更改环境变量PS1,修改命令行提示符的显示格式,并展示不同颜色. 本文介绍了默认设置的缺陷,以及需要用到的基础知识,最后介绍了更改命令行提示符格 ...

随机推荐

Android Activity task 相关属性

所谓的 task ,是指用户完成某一项任务时与之交互的一组 Activity.比如用户要向开发者汇报 bug,先打开程序主页,然后打开关于页面,再点击报告 bug 按钮,打开编辑邮件页面.当前这三个 ...

STM32 CANBus RAM Layout

F8 FF FF FF //F0R0 F0R1 F8 FF FF FF //F1R0 F1R1 F8 FF FF FF F8 FF FF FF F8 FF FF FF F8 FF FF FF F8 F ...

MongoDB 安装,启动与基本使用

一.MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++ ...

Unity3D脚本中文系列教程(七)

http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unit ...

通过例子学python(2.1)

第二章 列表和元组 2.1 序列概览 #第2章 列表和元组 #2.1 序列概览 #序列sequence , 序列中每一个元素被分配一个序号,即元素的位置,也称为索引. #从前往后,0,1,2,3,:从 ...

查询select

--------------select查询-------------------查询所有信息(方法一)select * from stuinfo --*号代表所有列--查询所有信息(方法二)sele ...

jquery参考手册

开始使用 jQueryjQuery 本身只有一个 js 文件,所以,要使用它,就和使用其它的 js 文件一样,直接将它引入就可以使用了.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部