在.net中的BouncyCastle OCSP响应

时间:2014-09-16 21:00:44

标签: .net x509certificate bouncycastle ocsp

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

RFC6960 OCSP Protocol中定义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包中的类表示RFC6960中定义的ASN.1格式的OCSPRequestOCSPResponse元素。

希望这有帮助,