我正在使用BouncyCastle发出一个OCSP请求,证明我知道它有效。我的问题是我获得了UNKNOWN证书状态。我知道这意味着服务器出了问题,它可以返回证书的状态。
在BouncyCastle框架内是否有办法获取错误描述,异常或某种消息,可以帮助我弄清楚为什么服务器无法处理此证书的验证?
谢谢!
答案 0 :(得分:0)
在RFC6960 OCSP Protocol中定义OCSP响应必须为OCSP请求中包含的每个证书添加以下信息:
...
请求中每个证书的响应 包括:o撤销状态的证书的标识符 正在提供信息(即目标证书);
o证书的撤销状态(好的,撤销的,或 未知);如果撤销,则表示该时间 证书被撤销,并且可选地,它之所以被撤销 撤销;
o响应的有效间隔;和
o可选扩展。 ...
仅在RFC中定义,当证书状态为revoked
时,其他信息会添加到OCSP响应中(时间和可选的撤销原因),状态为good
或unknown
没有添加其他信息。
您可以在本文档的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格式的OCSPRequest
和OCSPResponse
元素。
希望这有帮助,