Test certificates, chains and signing requests to download, each built to show one thing: a valid server certificate, a wildcard, an EC key, an expired certificate, a chain in the wrong order, a CSR without SAN. Every sample opens in the Certificate and CSR decoder with one click, so you can see exactly what a strict client will complain about before you test your own system with it.
All samples come from a small test PKI built for this page. Its root is named NOT TRUSTED, every name is a reserved example name, and no private key is published: the keys were deleted when the set was built.
Valid certificates
Everything here is well formed. Use them to test that a system accepts what it should: an import, a binding, a trust store, a monitoring check that must stay green.
| Sample | What the decoder shows | Download | Open |
|---|---|---|---|
Server certificateserver-leaf | www.example.com and example.com, RSA 2048. The decoder adds two notes: the issuer is not in the file (normal for a single certificate) and the private-CA lifetime. | server-leaf.pem (1.7 KB) server-leaf.cer (1.2 KB) | Open in the decoder |
Server certificate with its chainserver-fullchain | Leaf first, then the issuing CA: the chain order check passes. The .p7b is the same chain as PKCS #7, the format Windows exports. | server-fullchain.pem (3.4 KB) server-fullchain.p7b (2.5 KB) | Open in the decoder |
Wildcardwildcard | *.example.com plus example.com in the SAN. | wildcard.pem (1.7 KB) | Open in the decoder |
Several namesmulti-san | Four DNS names, an IPv4 and an IPv6 address in one certificate. | multi-san.pem (1.7 KB) | Open in the decoder |
EC P-256 keyec-p256 | Elliptic curve key on P-256, signed by the RSA issuing CA. | ec-p256.pem (1.4 KB) | Open in the decoder |
EC P-384 keyec-p384 | Elliptic curve key on P-384. | ec-p384.pem (1.4 KB) | Open in the decoder |
Ed25519 keyed25519 | Edwards-curve key. Public CAs do not issue these; useful to test what your software does with one. | ed25519.pem (1.3 KB) | Open in the decoder |
Client certificateclient-auth | Client Authentication purpose and an email address, no host names. | client-auth.pem (1.6 KB) | Open in the decoder |
Code signing certificatecode-signing | Code Signing purpose, RSA 3072. | code-signing.pem (1.8 KB) | Open in the decoder |
Root CAroot-ca | CA:TRUE, path length 1, RSA 4096. The decoder shows it as a CA certificate pasted on its own. | root-ca.pem (1.9 KB) root-ca.cer (1.3 KB) | Open in the decoder |
Issuing CAintermediate-ca | CA:TRUE, path length 0, RSA 3072. | intermediate-ca.pem (1.7 KB) | Open in the decoder |
Certificates with problems
Each one is broken in exactly one way. Use them to test that a system rejects or warns: an expiry alert, a strict client, a validation step in a pipeline.
| Sample | What the decoder shows | Download | Open |
|---|---|---|---|
Expiredexpired-leaf | Expired on 1 March 2025. The decoder reports it as an error. | expired-leaf.pem (1.6 KB) | Open in the decoder |
Not yet validnot-yet-valid | Starts on 1 January 2035. | not-yet-valid.pem (1.6 KB) | Open in the decoder |
No SANno-san | Common name only: browsers match no host name at all. | no-san.pem (1.6 KB) | Open in the decoder |
SHA-1 signaturesha1-signed | Signed with SHA-1, rejected by browsers. | sha1-signed.pem (1.6 KB) | Open in the decoder |
RSA 1024 keyrsa-1024 | A key too small for any public CA. | rsa-1024.pem (1.4 KB) | Open in the decoder |
Self-signed server certificateself-signed-server | As appliances ship them: trusted by nobody until someone installs it. | self-signed-server.pem (1.2 KB) | Open in the decoder |
Chain in the wrong orderchain-wrong-order | Intermediate first, then the leaf. The decoder shows where the order breaks. | chain-wrong-order.pem (3.4 KB) | Open in the decoder |
Missing intermediatechain-missing-intermediate | What a misconfigured server sends: the leaf without its issuing CA. | chain-missing-intermediate.pem (1.6 KB) | Open in the decoder |
Certificate signing requests
Requests as they go to a CA. Use them to practise the check before submission, or to test a CSR intake form.
| Sample | What the decoder shows | Download | Open |
|---|---|---|---|
CSR with SANcsr-with-san | RSA 2048, SHA-256, two DNS names requested. | csr-with-san.csr (1.1 KB) | Open in the decoder |
CSR without SANcsr-no-san | Common name only: the decoder notes that no SAN is requested. | csr-no-san.csr (0.9 KB) | Open in the decoder |
EC CSRcsr-ec-p256 | Elliptic curve request with one SAN name. | csr-ec-p256.csr (0.5 KB) | Open in the decoder |
About the test PKI
- Root: zaur.it Test Root CA – NOT TRUSTED (RSA 4096). Issuing CA: zaur.it Test Issuing CA – NOT TRUSTED (RSA 3072). Every sample except the self-signed one chains to them.
- Names: only
example.com,example.net,example.organd.testnames, and the documentation addresses192.0.2.0/24and2001:db8::/32. None of them belongs to anyone. - Dates: the valid samples run from 2026 to 2036, so they stay valid for years. Because that is longer than a public CA may issue, the decoder shows a lifetime line on them as information; for a private CA it is not an error. The expired and not-yet-valid samples have fixed dates.
- Keys: generated for the build and deleted at the end. No private key is in any file or in the ZIP, so nobody, including us, can sign anything with this PKI.
- Built with: OpenSSL 3.5.7, 30 September 2026. A rebuild makes new keys, so the checksums below would change.
Verify the downloads
Every file except the ZIP’s own checksum file is listed in SHA256SUMS in the sha256sum format. After downloading, check them on Linux or macOS with coreutils:
sha256sum -c --ignore-missing SHA256SUMS
On Windows, the same check in PowerShell. Get-FileHash uses SHA-256 by default and prints uppercase hex; -eq compares without case, so the lowercase values in the file still match:
Get-Content .\SHA256SUMS | ForEach-Object {
$hash, $file = $_ -split '\s+\*?', 2
if (Test-Path $file) {
'{0} {1}' -f $(if ((Get-FileHash $file).Hash -eq $hash) { 'OK' } else { 'FAILED' }), $file
}
}
Why the comparison operator matters is covered in Get-FileHash: the comparison that reports a good file as bad. For a single value, the Hash generator works too.
What to test with them
- Expiry monitoring: point the check at
expired-leaf.pemand confirm it alerts; point it atserver-leaf.pemand confirm it stays quiet. - Import on Windows:
server-leaf.cerandserver-fullchain.p7bare the formats the Certificate Import Wizard andcertutil -addstoreexpect. - Chain handling: feed
chain-wrong-order.pemandchain-missing-intermediate.pemto a load balancer or a Java trust store test and see which of them it accepts. - Strict clients:
sha1-signed.pem,rsa-1024.pemandno-san.pemshould all be rejected by a modern TLS client; if one is accepted, you have found a problem. - CSR intake: a form or a script that accepts CSRs should flag
csr-no-san.csr. - Parsers and pipelines: stable URLs and checksums make the set usable as fixtures in automated tests.
FAQ
Frequently asked questions
Only in a lab or a throwaway VM, and remove it afterwards. A root in a trust store makes that machine trust everything the root signs. Nobody can sign with this one, because its private key no longer exists, but a test root has no place on a production machine all the same.
A sample with a private key would let anyone who downloads it impersonate the sample names in a test, and it would contradict the rule the decoder enforces: a private key is never pasted into a website. For tests that need a key, generate your own with OpenSSL in a minute; the OpenSSL guide shows how.
Because a single certificate file never contains its issuer. The note is not an error about the file: it reminds you that a server must send the intermediate as well. Compare server-leaf with server-fullchain, which carries both.
The .pem files are Base64 with header lines, readable in a text editor. The .cer files are the same certificate in binary DER. The .p7b file is a PKCS #7 bundle holding the whole chain, the format Windows produces when you export a certificate with its chain. The decoder reads all three.
Not unless the set is rebuilt. A rebuild creates new keys, so every checksum would change; the page and SHA256SUMS would be updated together.
All files and SHA-256 checksums
| File | Size | SHA-256 |
|---|---|---|
| chain-missing-intermediate.pem | 1655 bytes | 925597b43763d2a9838d1bd709f0c4b0f5ea853ffe0a0f7b434da4187d4d40f9 |
| chain-wrong-order.pem | 3493 bytes | 1f4a0b642281aa78b872ccb222fe6942acbcd3b7cea31b2cdddfa3e1357d7af9 |
| client-auth.pem | 1679 bytes | 2c364bb469d3438e6d52bbfb97ac1d33543c249a9adc86cd13eda175719b9991 |
| code-signing.pem | 1854 bytes | d51dfcbfd00cad60ebe6e0e0e80bfa6524913c6a4e41c92eef5fa3f2c4d263b8 |
| csr-ec-p256.csr | 481 bytes | 30cd123dcb850c389d0c7edffed9290d63d1a3002c10883284c9294a37bbdd07 |
| csr-no-san.csr | 936 bytes | 35f49a1c937468aaf31c710a600f180c3e750e7768bd30908f655d0abbafee0a |
| csr-with-san.csr | 1155 bytes | f0d574de9423c90743fc7f24a826a91365f04bf21b1405f2f9cd61227371d647 |
| ec-p256.pem | 1383 bytes | 507ac0a4a92142c8fc194305d456abf10120c70f1bc83c68c4fb82a96eb8f528 |
| ec-p384.pem | 1419 bytes | d1cb5b0d19437ce1f15901c28ed684fefdfe4db45a0cd7ae856c6941295f7f73 |
| ed25519.pem | 1322 bytes | c14d6a7bf259741d35d3f823916c86ae7fbe9cd6a5a581a9f5664efb512c7b38 |
| expired-leaf.pem | 1663 bytes | 52ded56f1acb88cfbae7ee26007423c757ed6b9eca84d04daa7eab3e76ef1c5e |
| intermediate-ca.pem | 1777 bytes | 439d6e520c557ca64a2b74973509fa8539457bbfcaf6896f20f8ed31b2b901db |
| multi-san.pem | 1777 bytes | 7022e7b77a9136c987146a2955dac4b27555f316643f58bbc53930119a35fb74 |
| no-san.pem | 1614 bytes | 2d675bfbef06a1d0d4a2c8af47c1dcc343312d99b918affc3e562f63e1cb7c31 |
| not-yet-valid.pem | 1659 bytes | 605261c7acde6e761f055259fecc43b479169d94f63f1af743e2f6070379591e |
| root-ca.cer | 1364 bytes | f2406cd0f364d6f4c3e10fb866bd91263a012356e1d5b41bee8e9f1fb7d9f0a1 |
| root-ca.pem | 1903 bytes | 0581a434da95c52ba98b883699a35bc70a948af883dc4eb8be4c324b46a494d6 |
| rsa-1024.pem | 1484 bytes | e84efd289e54aae183e35161a75997eff95e3198c0dfde66538f4310e8017673 |
| self-signed-server.pem | 1224 bytes | 80d3cedc6a73cceb6aa83d3751f909674c5c4e306cca29b00123b5040a80691b |
| server-fullchain.p7b | 2546 bytes | ac93940f3828e4d6aa75213ba531741bd4f301d98998377062ff1ec481b68ff1 |
| server-fullchain.pem | 3493 bytes | 9de9b649240fe976c687cc752f6a06c00f8004951ed3ba86f2e773044c5ae03f |
| server-leaf.cer | 1227 bytes | fd06d287d02a22d8cbb73f1a47120928e308f07c0ed4f4974ff0d67535198821 |
| server-leaf.pem | 1716 bytes | dc322a4b0a3766dc4535f5b5a3a0fe9ad3ab576289f3faed02dedc61eb25ba6b |
| sha1-signed.pem | 1655 bytes | 74586099470b00c916ea3f3f4622ae731a2680f09a508ef296acb5cafd8ef3b0 |
| SHA256SUMS | 2161 bytes | 12655702150146567cbd9ac361db9b9820069f5b682b901b07436f684166b613 |
| wildcard.pem | 1696 bytes | d0a3577880a8bd2d8b5a3ace2b73a122dea1c9d7721dfba3aaccef3985bb57dd |
| zaur-it-sample-certificates.zip | 37231 bytes | 16c2b97a0344976b1cdaf3e9dc36a2796ecf13786b95092760f198fc052d6495 |
Related
- Certificate and CSR decoder: open any of these samples, or your own certificate.
- How to Generate SSL Certificates with OpenSSL: make your own test keys and certificates.
- Get-FileHash: the comparison that reports a good file as bad: verify downloads on Windows and avoid the case trap.
- OpenSSL Cheat Sheet: the conversion and inspection commands on one page.