[strongSwan] strongSwan reuses stale OCSP responses
Ander Juaristi
a at juaristi.eus
Wed Nov 15 16:30:21 CET 2017
Well, looking at the source code (5.6.0 release tarball), the "offending
line" is at revocation_validator.c:264:
if (revoked)
{ /* revoked always counts, even if stale */
*valid = VALIDATION_REVOKED;
}
So two questions now come to my mind:
1. What's the reason for this? I might well have missed some detail in
the specs or maybe it's just a strongSwan-specific design decision. In
either case (for my own education), what's that line there for?
2. I've seen the stale OCSP responses are deleted from the cache on a
'ipsec restart'. Could you please point me to the piece of code where
that cache purge is done?
Regards,
- AJ
El 2017-11-15 13:23, Ander Juaristi escribió:
> Hi,
>
> I'm trying to set up a use case where user certificates are revoked
> temporarily and then re-activated (think of a user being banned from
> accessing the server at set times, according to a policy). So I've got
> an OCSP server that returns either "good" or "revoked" responses
> according to such policy.
>
> Once my OCSP responder sends a "revoked" answer, strongSwan caches
> that answer forever and reuses it over and over again even after it
> becoming stale. I would expect strongSwan to query the OCSP responder
> again once the cached response becomes stale, but it is not happening.
>
> I don't want to be manually purging the OCSP cache with 'ipsec
> purgeocsp'.
>
> Is there a way to tell strongSwan to remove the expired responses
> automatically?
>
> This looks like the same use case that is described at [0].
>
> Here [1] it says:
>
> A valid OCSP response that revokes a particular certificate will
> be used even if it is stale.
>
> but it doesn't say why, specifically, why the response keeps on being
> used even if certificateHold was specified as the revoke reason.
>
> Thanks.
>
> Details
> =======
>
> My OCSP responder is sending revoked responses with a certificateHold
> (6) CRLReason, and a next update value of 1 minute later than the
> current time:
>
> Cert Status: revoked
> Revocation Time: Nov 15 12:00:55 2017 GMT
> Revocation Reason: certificateHold (0x6)
> This Update: Nov 15 12:00:55 2017 GMT
> Next Update: Nov 15 12:01:55 2017 GMT
>
> According to the spec [2], the certificateHold CRLReason means a
> certificate has been revoked temporarily:
>
> The "revoked" state indicates that the certificate has been
> revoked,
> either temporarily (the revocation reason is certificateHold) or
> permanently.
>
> I would expect strongSwan to query the OCSP responder again when the
> time expires, but it's not happening so. It keeps on using cached OCSP
> responses even though these are stale:
>
> charon: 06[CFG] ocsp response correctly signed by "C=ES,
> ST=XXXX, L=XXXX, O=XXXX, CN=ocsp.localhost"
> charon: 06[CFG] certificate was revoked on Nov 15 12:00:55 UTC
> 2017, reason: certificate hold
> charon: 06[CFG] ocsp response is stale: since Nov 15 12:01:55
> 2017
> charon: 06[CFG] using cached ocsp response
>
> I can clearly verify, with 'ipsec listocsp' that the response is stale:
>
> List of OCSP responses:
>
> signer: "C=ES, ST=XXXX, L=XXXX, O=XXXX, CN=ocsp.localhost"
> validity: produced at Nov 15 12:00:55 2017
> usable till Nov 15 12:01:55 2017, expired (101 seconds
> ago)
>
> References
> ==========
>
> [0] [strongSwan] OCSP and CRL -
> https://lists.strongswan.org/pipermail/users/2015-December/009049.html
> [1] Issue #1238 - https://wiki.strongswan.org/issues/1238
> [2] RFC 6960 - https://tools.ietf.org/html/rfc6960#section-2.2
More information about the Users
mailing list