这条链断在第几环

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

按信任链模型,叶子 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))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论