CRL 已过期,但 ChainStatus 告诉我 ReplicationStatusUnknown

问题描述 投票:0回答:1

我正在用这个进行链验证

var ca = new X509Certificate2(caBytes);
var intermediate = new X509Certificate2(intermediateBytes);

chain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
chain.ChainPolicy.CustomTrustStore.Add(ca);
chain.ChainPolicy.CustomTrustStore.Add(intermediate);
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;

var build = chain.Build(intermediate);

build
回报
false
,链状态包含:

  1. OfflineRevocation
  2. RevocationStatusUnknown

当我检查中间体时,它的 CRL 指向我可以访问的有效 URL。当我收到此 CRL 时

这里没有什么问题,只是

Next date
有点过去了。我看到这个已经过期了。当我执行
certutil -verify -urlfetch Tesla_Intermediate_BAM_CRAS.crt
时,我得到以下信息

Issuer:
    CN=Tesla CA
    OU=CA
    O=Tesla Asics
    C=CI
  Name Hash(sha1): 444444444444444444444444
  Name Hash(md5): 555555555555555555555555
Subject:
    CN=Tesla Intermediate BAM CRAS
    OU=IT
    O=Tesla Asics
    C=CI
  Name Hash(sha1): 222222222222222222222222222
  Name Hash(md5): 33333333333333333333333333
Cert Serial Number: 02

dwFlags = CA_VERIFY_FLAGS_CONSOLE_TRACE (0x20000000)
dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000)
ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000)
HCCE_LOCAL_MACHINE
CERT_CHAIN_POLICY_BASE
-------- CERT_CHAIN_CONTEXT --------
ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
ChainContext.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
ChainContext.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)
ChainContext.dwRevocationFreshnessTime: 2158 Days, 54 Minutes, 33 Seconds

SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
SimpleChain.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
SimpleChain.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)
SimpleChain.dwRevocationFreshnessTime: 2158 Days, 54 Minutes, 33 Seconds

CertContext[0][0]: dwInfoStatus=101 dwErrorStatus=1000040
  Issuer: CN=Tesla CA, OU=CA, O=Tesla Asics, C=CI
  NotBefore: 16/01/2018 13:57
  NotAfter: 16/01/2028 13:57
  Subject: CN=Tesla Intermediate BAM CRAS, OU=IT, O=Tesla Asics, C=CI
  Serial: 02
  Cert: 111111111111111111111
  Element.dwInfoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER (0x1)
  Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
  Element.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
  Element.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)
  ----------------  Certificate AIA  ----------------
  No URLs "None" Time: 0 (null)
  ----------------  Certificate CDP  ----------------
  Expired "Base CRL (01)" Time: 0 666666666666666666
    [0.0] http://crl.Tesla.ca/Tesla_CA_Root.crl

  ----------------  Base CRL CDP  ----------------
  No URLs "None" Time: 0 (null)
  ----------------  Certificate OCSP  ----------------
  No URLs "None" Time: 0 (null)
  --------------------------------
    CRL 01:
    Issuer: CN=Tesla CA, OU=CA, O=Tesla Asics, C=CI
    ThisUpdate: 22/01/2018 15:50
    NextUpdate: 21/02/2018 15:50
    CRL: 666666666666666666

CertContext[0][1]: dwInfoStatus=109 dwErrorStatus=0
  Issuer: CN=Tesla CA, OU=CA, O=Tesla Asics, C=CI
  NotBefore: 16/01/2018 13:55
  NotAfter: 16/01/2038 13:55
  Subject: CN=Tesla CA, OU=CA, O=Tesla Asics, C=CI
  Serial: 01
  Cert: 7777777777777777777
  Element.dwInfoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER (0x1)
  Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8)
  Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
  ----------------  Certificate AIA  ----------------
  No URLs "None" Time: 0 (null)
  ----------------  Certificate CDP  ----------------
  No URLs "None" Time: 0 (null)
  ----------------  Certificate OCSP  ----------------
  No URLs "None" Time: 0 (null)
  --------------------------------

Exclude leaf cert:
  Chain: 88888888888888888888888
Full chain:
  Chain: 999999999999999999999999999
  Issuer: CN=Tesla CA, OU=CA, O=Tesla Asics, C=CI
  NotBefore: 16/01/2018 13:57
  NotAfter: 16/01/2028 13:57
  Subject: CN=Tesla Intermediate BAM CRAS, OU=IT, O=Tesla Asics, C=CI
  Serial: 02
  Cert: 111111111111111111111
Tilbagekaldsfunktionen kunne ikke kontrollere tilbagekaldelsen, fordi tilbagekaldsserveren var offline. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
------------------------------------
Revocation check skipped -- server offline
Cert is a CA certificate

ERROR: Verifying leaf certificate revocation status returned Tilbagekaldsfunktionen kunne ikke kontrollere tilbagekaldelsen, fordi tilbagekaldsserveren var offline. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
CertUtil: Tilbagekaldsfunktionen kunne ikke kontrollere tilbagekaldelsen, fordi tilbagekaldsserveren var offline.

CertUtil: -verify command completed successfully.

我不是

certutil
的专业人士,但我可以看到它告诉我 CRL 已过期:

  Expired "Base CRL (01)" Time: 0 666666666666666666
    [0.0] http://crl.Tesla.ca/Tesla_CA_Root.crl

还是有别的意思?

我希望

ChainStatus
报告其他内容,例如
CtlNotTimeValid
,但事实并非如此。难道我做错了什么?当我与运行 CA 的服务支持人员交谈时,他们告诉我他们有一个有效的 CRL 分发点,但我在这里看不到任何有效的内容,除了我可以到达端点。

我听到的感觉是:

  1. CA 有一个可获取的 CRL 分发点,
  2. 为中间体分发过期的 CRL,并且
  3. 拥有离线的 CA

如果他们没有有效的未过期 CRL,我认为除了寻求

NoCheck
之外,没有其他方法可以解决此问题。 CA 说当 CA 或中间体被撤销时他们会通知我,所以我并不是完全一无所知。

这是专业的操作方式吗?我希望他们要么有更新的 CRL,要么根本没有。

问题:

  1. ChainStatus
    certutil
    是否意味着CRL已过期,因此我只能在执行
    NoCheck
  2. 时才能构建链
  3. CA 不更新其 CRL 的正确流程是吗?他们不应该根本就没有吗?
c# x509certificate2 ca certutil
1个回答
0
投票

CtlNotTimeValid
CtlNotValidForUsage
不适用于 CRL 检查,它们用于 CTL(证书信任列表),这是一种决定哪些 CA 证书受信任以及用于什么目的的机制。

CRL 仅用于吊销检查,并且仅具有标志

OfflineRevocation
RevocationStatusUnknown
。如果定义的 URL 处的 CRL 无效(过期),则它本质上是“离线”或不可用,即无法确定吊销状态。

我建议您与 CA 联系,并向他们解释他们需要经常发布 CRL。 14 或 30 天更为常见。如果他们不这样做,那么他们就没有遵循 CA 的标准化做法,并且应该报告不合规情况。

如果您在内部运行自己的 CA,那么设置 CRL 分发周期通常非常简单

© www.soinside.com 2019 - 2024. All rights reserved.