名字对不上验成什么

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

按证书模型,证书 cn=a.local、期内受信,却拿去访问 b.local,verify 交回什么?

贯穿本节的证书模型:一张证书是 dict(cn, issuer, nb, na)——发给谁(cn)、谁签的(issuer)、有效期 [nb, na)。is_self_signed=主体与签发者同名,expired(cert, now)=不在有效期,host_ok(cert, host)=cn 与访问域名一致,trusted=签发 CA 在受信列表 {MyCA, RootCA}verify(cert, host, now)先有效期、再域名、再受信的顺序,交回 过期/域名不符/不受信/ok

# 一张证书:给谁发的(cn)、谁签的(issuer)、有效期[nb,na)、签发它的 CA
def cn_of(cert):
    return cert["cn"]


def issuer_of(cert):
    return cert["issuer"]


def is_self_signed(cert):
    # 自己签给自己:主体和签发者是同一个名字
    return cert["cn"] == cert["issuer"]


def expired(cert, now):
    # 不在有效期内就算过期(含还没生效)
    return not (cert["nb"] <= now < cert["na"])


def host_ok(cert, host):
    # 证书上的名字要和你访问的域名对得上
    return cert["cn"] == host


TRUSTED = {"MyCA", "RootCA"}


def trusted(cert):
    # 签发它的 CA 在受信任列表里
    return cert["issuer"] in TRUSTED


def verify(cert, host, now):
    # 浏览器验证证书的顺序:先看有效期、再看域名、再看是否受信
    if expired(cert, now):
        return "过期"
    if not host_ok(cert, host):
        return "域名不符"
    if not trusted(cert):
        return "不受信"
    return "ok"

cert = dict(cn="a.local", issuer="MyCA", nb=100, na=900)
print(verify(cert, "b.local", 500))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论