。net中的BouncyCastle OCSP响应

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

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

在BouncyCastle框架内是否有一种方法可以获取错误说明,异常或某种消息,这些信息可以帮助我弄清楚服务器为什么无法处理此证书的验证?

.net x509certificate bouncycastle ocsp
1个回答
0
投票

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

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

o吊销状态的证书的标识符正在提供信息(即目标证书);

o证书的吊销状态(良好,已吊销或未知);如果被撤消,则表明证书被吊销,并且可以选择吊销其原因撤销;

o响应的有效间隔;和

o可选扩展名。 ...

仅当证书状态为revoked时,才在RFC中定义。将附加信息添加到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包中的类,它们表示OCSPRequest和RFC6960中定义的ASN.1格式的OCSPResponse元素。

希望这会有所帮助,

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