python檢測ipa證書過期時間

2021-09-26 00:22:14 字數 4472 閱讀 1057

我們打出的ipa包,對應的證書和mobileprovision檔案是會過期的

過期了之後,ipa就會無法執行或安裝

為了方便知道打出的ipa的過期時間,下面提供乙個python指令碼,方便檢測

需要在mac上執行,把你的ipa放到pyhton指令碼所在的目錄

python指令碼如下

# check_timeout.py

import os

import shutil

import re

import subprocess

import re

import time

import calendar

defpopen_cmd

(cmd)

: gbk =

'gbk'

utf8 =

'utf-8'

current_encoding = gbk

popen = subprocess.popen(cmd, shell =

true

, stdout = subprocess.pipe,

stderr = subprocess.pipe,

bufsize=1)

out,err = popen.communicate(

)#print(out)

#print(err)

#print('returncode:' + str(popen.returncode))

return out

defunzip_ipa

(ipa_name)

: os.system(

'unzip -q ./'

+ ipa_name)

os.system(

)def

popen_openssl()

: out = popen_cmd(

'openssl x509 -inform der -in codesign0 -noout -nameopt -oneline -dates'

) match = re.search(

'notafter=(.*)'

, out)

# jan 9 02:31:00 2020 gmt

result = match.group(1)

match = re.search(

'(\w*)\s*(\w*)\s*(\w*):(\w*):(\w*)\s*(\w*)\s*gmt'

, result)

m = month_str_to_num(match.group(1)

) d = match.group(2)

h = match.group(3)

m = match.group(4)

s = match.group(5)

y = match.group(6)

t ='%s-%s-%s %s:%s:%s'

%(y,m,d,h,m,s)

#print(t)

return str_to_timestamp(t)

, t

defmonth_str_to_num

(month_str)

:return

list

(calendar.month_abbr)

.index(month_str)

# %y-%m-%d %h:%m:%s

defstr_to_timestamp

(str):

time_array = time.strptime(

str,

"%y-%m-%d %h:%m:%s"

) timestamp =

int(time.mktime(time_array)

)return timestamp

defdelete_other_file()

: os.remove(

"codesign0"

) os.remove(

"codesign1"

) os.remove(

"codesign2"

) shutil.rmtree(

"payload"

)def

cat_mobileprovision

: out = popen_cmd(

'cat payload/%s/embedded.mobileprovision'

match = re.search(

'expirationdate\\n\s*(.*)'

, out)

result = match.group(1)

result = result.replace(

't',

' ')

result = result.replace(

'z','')

#print(result)

return str_to_timestamp(result)

, result

defget_ipa()

:for f in os.listdir(

'.')

:if f.endswith(

'.ipa'):

return f

def():

for d in os.listdir(

'./payload'):

if d.endswith():

return d

if __name__ ==

'__main__'

: unzip_ipa(get_ipa())

stamp1, t1 = popen_openssl())

) delete_other_file(

)if stamp1 < stamp2:

print

('timeout:'

+ t1)

else

:print

('timeout: '

+ t2)

執行效果

將gmt時間格式的字串轉換成datetime型別

dd =

"fri nov 09 2018 14:41:35 gmt+0800 (cst)"

gmt_format =

'%a %b %d %y %h:%m:%s gmt+0800 (cst)'

print

(datetime.strptime(dd, gmt_format))

output:

2018-11

-0914:

41:35

注意:gmt_format的格式要與索要轉化的字串相對應。

擴充套件:python的格式轉化

%a 本地的星期縮寫

%a 本地的星期全稱

%b 本地的月份縮寫

%b 本地的月份全稱

%c 本地的合適的日期和時間表示形式

%d 月份中的第幾天,型別為decimal number(10進製數字),範圍[01,31]

%f 微秒,型別為decimal number,範圍[0,999999],python 2.6新增

%h 小時(24進製),型別為decimal number,範圍[00,23]

%i 小時(12進製),型別為decimal number,範圍[01,12]

%j 一年中的第幾天,型別為decimal number,範圍[001,366]

%m 月份,型別為decimal number,範圍[01,12]

%m 分鐘,型別為decimal number,範圍[00,59]

%p 本地的上午或下午的表示(am或pm),只當設定為%i(12進製)時才有效

%s 秒鐘,型別為decimal number,範圍[00,61](60和61是為了處理閏秒)

%u 一年中的第幾周(以星期日為一周的開始),型別為decimal number,範圍[00,53]。在度過新年時,直到一周的全部7天都在該年中時,才計算為第0周。只當指定了年份才有效。

%w 星期,型別為decimal number,範圍[0,6],0為星期日

%w 一年中的第幾周(以星期一為一周的開始),型別為decimal number,範圍[00,53]。在度過新年時,直到一周的全部7天都在該年中時,才計算為第0周。只當指定了年份才有效。

%x 本地的合適的日期表示形式

%x 本地的合適的時間表示形式

%y 去掉世紀的年份數,型別為decimal number,範圍[00,99]

%y 帶有世紀的年份數,型別為decimal number

%z 時區名字(不存在時區時為空)

%% 代表轉義的"%"字元

kubeadm證書 etcd證書過期處理

今天突然測試環境的kubernetes 持續整合 持續發布出了問題了,然後上測試環境伺服器排查,發現kubectl指令執行出現問題,unable to connect to the server x509 certificate has expired or is not yet valid然後翻譯...

python之網域名稱證書檢測

網際網路安全越來越受到企業重視,https證書也成為各個公司必備,但是網域名稱過多 系統複雜 證書不一致 過期給證書安裝 替換增加了很大的困難,基於此,本文編寫了證書檢測程式,進行常態化監控證書情況 操作環境 python2.7 依賴包 ssl,socket 這裡是關於證書的乙個最新訊息 從2020...

SharePoint Fast 證書過期問題

使用sharepoint fast,因為是使用ssh驗證的,會存在乙個證書過期問題,我想是因為設計fast4sharepoint的時候,考慮到分布式的安全機制,所以需要fast和sharepoint都需要證書,來實現安全通訊。怎麼重新生成證書,並匯入到fast呢?1.需要使用到powershell,...