为了账号安全,请及时绑定邮箱和手机立即绑定

CRL处理中比较interim_reasons_mask和reasons_mask的原因

CRL处理中比较interim_reasons_mask和reasons_mask的原因

浮云间 2023-02-23 14:25:51
在RFC5280中的 6.3.3。CRL处理部分有一个步骤:验证 interim_reasons_mask 是否包含 reasons_mask 中未包含的一个或多个原因。有人可以解释一下这张支票的意义是什么。当我尝试使用指向某个 URL 的分发点验证证书时,它在 DistributionPointFetcher:591 中失败。reasonsMasks 设置为 9 true's 所以我不知道怎么可能通过这个检查原因因为它已经初始化它从未改变过。更新初始化原因掩码的代码:链接在 DistributionPointFetcher 中传递原因掩码以进行处理的代码:链接
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

reasons_mask: 此变量包含到目前为止处理的 CRL 和增量 CRL 支持的一组撤销原因。

interim_reasons_mask: 这包含当前正在处理的 CRL 或 delta CRL 支持的一组撤销原因。

据我所知,此处理的目的是收集 CRL 以支持尽可能多的撤销原因。因此,如果当前 CRL 支持任何先前 CRL 不支持的任何撤销原因,它只会将当前 CRL 添加到列表中。

如果您reasons_mask包含所有内容true,那么之前的 CRL 已经涵盖了所有撤销原因,或者没有给出它支持的特定撤销原因导致设置特殊值all-reasons(所有标志为真),这意味着不需要涵盖进一步的撤销原因,因此它不会进一步检查。


sun.security.provider.certpath.DistributionPointFetcher.java

...

// compute interim reasons mask

boolean[] interimReasonsMask = new boolean[9];

ReasonFlags reasons = null;

if (idpExt != null) {

    reasons = (ReasonFlags) idpExt.get(IssuingDistributionPointExtension.REASONS);

}


boolean[] pointReasonFlags = point.getReasonFlags();

if (reasons != null) {

    if (pointReasonFlags != null) {

        // set interim reasons mask to the intersection of

        // reasons in the DP and onlySomeReasons in the IDP

        boolean[] idpReasonFlags = reasons.getFlags();

        for (int i = 0; i < interimReasonsMask.length; i++) {

            interimReasonsMask[i] = (i < idpReasonFlags.length && idpReasonFlags[i])

                    && (i < pointReasonFlags.length && pointReasonFlags[i]);

        }

    } else {

        // set interim reasons mask to the value of

        // onlySomeReasons in the IDP (and clone it since we may

        // modify it)

        interimReasonsMask = reasons.getFlags().clone();

    }

} else if (idpExt == null || reasons == null) {

    if (pointReasonFlags != null) {

        // set interim reasons mask to the value of DP reasons

        interimReasonsMask = pointReasonFlags.clone();

    } else {

        // set interim reasons mask to the special value all-reasons

        Arrays.fill(interimReasonsMask, true);  // ### SEE HERE ###

    }

}


// verify that interim reasons mask includes one or more reasons

// not included in the reasons mask

boolean oneOrMore = false;

for (int i = 0; i < interimReasonsMask.length && !oneOrMore; i++) {

    if (interimReasonsMask[i] && !(i < reasonsMask.length && reasonsMask[i])) {

        oneOrMore = true;

    }

}

if (!oneOrMore) {

    return false;

}

...


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信