0

我正在使用 BouncyCastle 和我知道其有效的证书发出 OCSP 请求。我的问题是我得到了一个未知的证书状态。我知道这意味着服务器出了问题,它可以返回证书的状态。

在 BouncyCastle 框架中,有没有办法获得错误描述、异常或某种消息,可以帮助我弄清楚为什么服务器无法处理此证书的验证?

4

1 回答 1

0

RFC6960 OCSP 协议中定义 OCSP 响应必须为 OCSP 请求中包含的每个证书添加以下信息:

...
请求中每个证书的响应包括:

o 为其提供撤销状态信息的证书的标识符(即目标证书);

o 证书的撤销状态(良好、已撤销或未知);如果被吊销,则表明证书被吊销的时间,以及(可选)被吊销的原因;

o 响应的有效期;和

o 可选扩展。...

正如 RFC 中所定义的,仅当证书状态是revoked附加信息时才添加到 OCSP 响应(时间和可选的撤销原因),当状态是每个goodunknown不添加其他信息时。

您可以CertStatus在本文档的 ASN.1 定义中看到:

 CertStatus ::= CHOICE {
       good        [0]     IMPLICIT NULL,
       revoked     [1]     IMPLICIT RevokedInfo,
       unknown     [2]     IMPLICIT UnknownInfo }

   RevokedInfo ::= SEQUENCE {
       revocationTime              GeneralizedTime,
       revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }

   UnknownInfo ::= NULL

因此,即使 BouncyCastle 有办法解析此 OCSP 响应信息,您也无法获得unknown证书的其他详细信息。如果您检查org.bouncycastle.asn1.ocsp.CertStatus代表此结构的类,您会看到相同的结果:

public CertStatus(ASN1TaggedObject    choice)
{
    this.tagNo = choice.getTagNo();

    switch (choice.getTagNo())
    {
    case 0:
        value = new DERNull();
        break;
    case 1:
        value = RevokedInfo.getInstance(choice, false);
        break;
    case 2:
        value = new DERNull();
    }
}

就像规范所说的那样,good(0)unknown(2)具有NULL作为信息,并且仅用于revoked(1)添加更多信息。

无论如何,如果您至少在 java 中对 BouncyCastle 感到好奇(我想在 C# 版本中也是如此),有类可以使用 OCSP 协议,请查看org.bouncycastle.asn1.ocsp包中的类,这些类代表定义的 ASN.1 格式的OCSPRequest元素OCSPResponse在 RFC6960 中。

希望这可以帮助,

于 2014-09-17T21:44:16.310 回答