Skip to content

Commit 1e42831

Browse files
committed
Return unknown information inside of Basic Responde
1 parent abf2d8a commit 1e42831

2 files changed

Lines changed: 20 additions & 14 deletions

File tree

examples/ocsp_responder/ocsp_responder.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -682,8 +682,6 @@ static enum Ocsp_Response_Status MapErrorToOcspStatus(int err)
682682
return OCSP_INTERNAL_ERROR;
683683
case ASN_NO_SIGNER_E:
684684
return OCSP_UNAUTHORIZED;
685-
case OCSP_CERT_UNKNOWN:
686-
return OCSP_UNAUTHORIZED;
687685
default:
688686
return OCSP_INTERNAL_ERROR;
689687
}

src/ocsp.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2753,24 +2753,32 @@ int wc_OcspResponder_WriteResponse(OcspResponder* responder,
27532753
/* Find the certificate status */
27542754
certStatus = FindCertStatus(ca, req.serial, req.serialSz);
27552755
if (certStatus == NULL) {
2756-
WOLFSSL_MSG("No status configured for requested certificate");
2757-
ret = OCSP_CERT_UNKNOWN;
2758-
goto out;
2756+
/* RFC 6960: 'unknown' is a per-certificate status inside a successful
2757+
* OCSPResponse, not an error response. Generate a successful response
2758+
* with CERT_UNKNOWN so clients can distinguish it from UNAUTHORIZED. */
2759+
OcspResponderCertStatus unknownStatus;
2760+
WOLFSSL_MSG("No status for requested certificate, responding unknown");
2761+
if (req.serialSz > EXTERNAL_SERIAL_SIZE) {
2762+
ret = BUFFER_E;
2763+
goto out;
2764+
}
2765+
XMEMSET(&unknownStatus, 0, sizeof(unknownStatus));
2766+
XMEMCPY(unknownStatus.serial, req.serial, req.serialSz);
2767+
unknownStatus.serialSz = req.serialSz;
2768+
unknownStatus.status = CERT_UNKNOWN;
2769+
ret = OcspResponse_WriteResponse(responder, response, responseSz, ca,
2770+
&unknownStatus, &req);
27592771
}
2760-
2761-
WOLFSSL_MSG("Found CA and certificate status");
2762-
2763-
ret = OcspResponse_WriteResponse(responder, response, responseSz, ca,
2764-
certStatus, &req);
2765-
if (ret != 0) {
2766-
WOLFSSL_MSG("Failed to write OCSP response");
2767-
goto out;
2772+
else {
2773+
WOLFSSL_MSG("Found CA and certificate status");
2774+
ret = OcspResponse_WriteResponse(responder, response, responseSz, ca,
2775+
certStatus, &req);
27682776
}
27692777

2770-
ret = 0;
27712778
out:
27722779
if (reqInited)
27732780
FreeOcspRequest(&req);
2781+
WOLFSSL_LEAVE("wc_OcspResponder_WriteResponse", ret);
27742782
return ret;
27752783
}
27762784

0 commit comments

Comments
 (0)