Paste an X.509 certificate to extract its OCSP responder and CRL distribution point URLs plus subject, so you can run the revocation check yourself. Free.
Paste a PEM-encoded X.509 certificate and this tool extracts the revocation endpoints embedded in it: the OCSP responder URLs from the Authority Information Access extension, and the CRL distribution point URLs. It then hands you the exact openssl commands to query those endpoints, pre-filled with the URLs it found.
Be clear on what that is and is not. This tool reads the certificate; it does not contact the CA. Browsers cannot make an OCSP request to an arbitrary responder — the responders do not send CORS headers, so the request is blocked before it leaves the page. Live revocation checking has to happen from a command line or a server. What you get here is everything you need to run that check, extracted in your browser, plus the answers to the questions that come up while you are doing it.
-----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines. The tool base64-decodes the body and scans the DER for URL patterns.The certificate never leaves your browser. Decoding and pattern extraction run entirely client-side, with no upload and no network request — which matters, because certificates from internal PKI often carry hostnames you would rather not paste into someone else's server.
There is a domain input mode, but it does not fetch certificates from live hosts; it points you at a checker that does. To go from a hostname to a PEM you can paste here, either retrieve it with openssl s_client -connect example.com:443 -showcerts or export it from your browser's certificate viewer.
Extraction is pattern-based rather than a full ASN.1 parse, which makes it fast and dependency-free but means it reports URLs and the common name, not a complete decoded certificate. If you need the serial number, the extensions, or the full subject and issuer, decode the same certificate with the X.509 decoder — and you will need that serial number to interpret a CRL anyway.
An OCSP query needs three things: the certificate, the certificate that issued it, and the responder URL. The issuer is not optional — OCSP identifies a certificate by a hash of the issuer name and key plus the serial number, so without the issuer certificate there is nothing to hash.
openssl ocsp -issuer issuer.pem -cert cert.pem -url http://ocsp.example-ca.com -text
The response you care about is a single line: cert.pem: good, revoked, or unknown. If you get unknown, the responder does not recognise the certificate — usually because you paired it with the wrong issuer, or because you are querying a responder that does not serve that CA.
A CRL check is a download and a search:
curl -o crl.der http://crl.example-ca.com/ca.crl then openssl crl -inform DER -in crl.der -text
CRLs are DER-encoded, so -inform DER is mandatory; leaving it off produces an unhelpful parse error. The output is a list of serial numbers with revocation dates. Search it for your certificate's serial — absence from the list means not revoked.
Both answer the same question by opposite methods. A CRL (RFC 5280) is a signed list of every serial number the CA has revoked, published as a file and refreshed periodically. OCSP (RFC 6960) is a request-response protocol: you ask about one specific certificate and get a signed answer about that certificate.
| OCSP | CRL | |
|---|---|---|
| Shape | Query one certificate, get one answer | Download the whole revoked-serial list |
| Freshness | Close to real time, bounded by responder caching | As stale as the publication interval allows |
| Bandwidth per check | Small request, small response | Whole list, which for a large CA is large |
| Offline use | Requires the responder to be reachable | Works from a cached copy |
| Privacy | The CA learns which site you are visiting | Reveals nothing about what you look up |
| Failure mode | Responder down means no answer | Stale list means a wrong answer |
The privacy row is the one people underrate. Every unstapled OCSP request tells the certificate authority that someone at this IP address is about to load this site, right now. Aggregated across a CA that covers a large slice of the web, that is a browsing-history feed as a side effect of a security check.
Stapling inverts who does the asking. Instead of every visitor querying the CA, the server queries the responder on a schedule, caches the signed response, and includes it in the TLS handshake using the Certificate Status Request extension (RFC 6066). The response is signed by the CA and timestamped, so the server cannot forge or replay a stale one beyond its validity window.
That fixes both weaknesses at once:
Stapling is a server-side configuration (ssl_stapling on in nginx, SSLUseStapling on in Apache) and it is close to free. If you administer a public web server and have not enabled it, that is the single highest-value item on this page. To verify it is working: openssl s_client -connect example.com:443 -status and look for an OCSP Response Status: successful block rather than the words "no response sent".
The gap stapling leaves is that a server can simply not staple, and the client has no way to know whether that is a misconfiguration or an attacker suppressing a "revoked" answer. The OCSP Must-Staple extension (RFC 7633) closes it by marking a certificate as one that must always arrive with a stapled response — but it is a foot-gun: if your stapling breaks, the certificate hard-fails instead of degrading, and adoption has stayed low for exactly that reason.
Here is the part that changes how you should reason about revocation. When a browser cannot reach a revocation service — responder down, network blocked, captive portal, timeout — it does not block the connection. It proceeds. That is soft-fail, and it has been the default behaviour in mainstream browsers for years.
The reasoning is pragmatic. Hard-fail would mean that any CA responder outage takes down every site using that CA, worldwide, instantly — converting a CA's availability problem into a global outage. Nobody was willing to ship that, so soft-fail won.
The security consequence follows immediately. An attacker who can present a stolen certificate is, by definition, in a position to interfere with your network traffic. Blocking or timing out the OCSP request is trivially within their power. Soft-fail then turns a "revoked" answer they could not have obtained into no answer at all, and the browser continues. Against exactly the adversary revocation exists to stop, classical OCSP provides close to nothing.
Practical implications:
Because live checking was slow, leaky and unreliable, the major browsers largely stopped doing it on the fly and moved the problem to push delivery.
Chrome uses CRLSets: Google aggregates CRLs, filters them down to a curated set of revocations judged important — intermediate CAs, known compromises, high-impact certificates — and pushes the result to browsers as a component update. It is fast and it is local, so there is no responder to block and no privacy leak. The tradeoff is coverage: a routine revocation of one leaf certificate is unlikely to make it into a CRLSet. Chrome has been extending this with a more complete pushed revocation set, but the model is the same — the answer arrives before you need it.
Firefox uses CRLite, which aims at the coverage problem directly. It compresses the full set of known revocations for publicly trusted certificates into a compact cascading-filter structure small enough to push to every client and update frequently. The result is a complete revocation answer computed locally, with no request to anyone, and it is able to hard-fail because there is nothing to be offline about.
Both approaches share a design insight worth internalising: the reliable way to check revocation is to already have the answer. Asking a third party at connection time was always going to be blockable, slow and privacy-invasive.
What this means for you as an operator: after you revoke a certificate, do not assume browsers will start rejecting it promptly. Some will, some will not, and the timing depends on push cycles you do not control. Revoke, but also remove the certificate from every server, rotate the key, and monitor for the old one still being served.
When a CRL entry or OCSP response carries a reason, it is one of the RFC 5280 codes. They matter mainly because keyCompromise triggers different handling from a routine replacement.
| Code | Reason | When it is used |
|---|---|---|
| 0 | unspecified | No reason given. Common and uninformative. |
| 1 | keyCompromise | The private key is believed exposed. The serious one. |
| 2 | cACompromise | An issuing CA's key is compromised. Affects everything beneath it. |
| 3 | affiliationChanged | Subject details changed — organisation renamed, domain moved. |
| 4 | superseded | Replaced by a new certificate. The ordinary reissue case. |
| 5 | cessationOfOperation | The certificate is no longer needed; the service is gone. |
| 6 | certificateHold | Temporary suspension — the only reversible state. |
| 8 | removeFromCRL | Lifts a hold, in delta-CRL processing. |
| 9 | privilegeWithdrawn | The subject's entitlement to the certificate was withdrawn. |
openssl x509 -inform DER -in cert.der -out cert.pem.