这条链断在第几环
按信任链模型,叶子 issuer 是 MyCA、但下一张 cn 是 OtherCA,链断在下标几?
贯穿本节的信任链模型:chain 是 [叶子, 中间 CA, …, 根] 的列表,每张的 issuer 要等于下一张的 cn(一环扣一环),最后一张的 issuer 要是受信根 {RootCA}。chain_ok 交回整条通不通,broken_at 交回第一处接不上的下标(叶子=0,全通=-1)。
ROOTS = {"RootCA"}
def chain_ok(chain):
# chain: [叶子, 中间CA, ..., 根],每张的 issuer 要等于下一张的 cn,最后一张 issuer 是受信根
for i in range(len(chain) - 1):
if chain[i]["issuer"] != chain[i + 1]["cn"]:
return False
return chain[-1]["issuer"] in ROOTS
def broken_at(chain):
# 返回第一处接不上的下标(叶子=0);都接上返回 -1
for i in range(len(chain) - 1):
if chain[i]["issuer"] != chain[i + 1]["cn"]:
return i
if chain[-1]["issuer"] not in ROOTS:
return len(chain) - 1
return -1
chain = [dict(cn="a.local", issuer="MyCA"), dict(cn="OtherCA", issuer="RootCA")]
print(broken_at(chain))
全部评论