india-pki-watch
Tamper-evident snapshots of India's PKI trust anchors and the CA-published artifacts behind them. If a certificate is silently re-issued, this archive makes it detectable by diff.
Why this exists
Every TLS connection to a *.gov.in site, every bank on the .bank.in zone, and every document-signing chain in India terminates — eventually — at a small set of certificate authorities licensed by the Controller of Certifying Authorities (CCA). In October 2026 the eMudhra/emSign chain compromise made those anchors first-class evidence. When a CA fixes a problem, it rarely announces it: roots get re-issued, files get replaced, Last-Modified headers quietly move. There is no public, timestamped record of what each CA served and when.
This repo is that record. Each snapshot is a dated directory of certificate files as served — bytes, HTTP headers, the page that linked them, and a SHA256SUMS.txt manifest — committed to git so the history of every re-fetch is externally verifiable.
Sources
| Source | What | Snapshot |
|---|---|---|
cca-gov-in/ | CCA India root certificates page — the national root (CCA India 2022, CCA India 2022 SPL) | 2026-10-30 (2 certs) |
emsign-repository/ | Full corpus of the eMudhra/emSign public repository — every cert the CA publishes, with its own fingerprints as cross-check | 2026-11-02 (131 certs; 15 newly listed) |
idrbt-ca/ | IDRBT CA — unreachable (see findings) | status note only |
nic-ca/ | NIC CA — candidate; no public endpoint located yet | — |
Baseline fingerprints
| Certificate | SHA-256 (file as served) |
|---|---|
| CCA India 2022 serial 762433EB…, RSA-4096, valid 2022→2042 | 2427c86a7f7e7bbe1684b75cfe96537ab080d00b7d6acf0c4453b438f246e0ee |
| CCA India 2022 SPL serial 628281C6…, RSA-4096, valid 2022→2042 | 6e92017ece0e2e752a59b37c0ebf0fb958311cc585deda1fdf12790eb99b3caf |
| emSign ECC Root CA - G3 the compromised-chain root; matches eMudhra's published fingerprint | 86a1ecba089c4a8d3bbe2734c612ba341d813e043cf9e8a862cd5c57a36bbe6b |
All 131 emSign-corpus certs verified against the SHA-256 fingerprints eMudhra itself publishes; 15 subordinate CA certificates are newly listed versus 2026-10-30, while the prior 116 certs remain byte-identical. CCA files captured with Last-Modified: 17 Sep 2025 12:06:51 GMT at fetch time.
Findings already on record
END CERTIFICATE marker, so openssl x509 -in CCAIndia2022SPL.cer refuses to parse it. The embedded DER is intact. A national root CA distributing a root its own validators can't parse is its own hygiene finding — and exactly the kind of artifact detail Certificate Transparency can never capture.
praman portal 404s. Meanwhile the entire .bank.in zone we swept (25 hosts) is served by an eMudhra intermediate (EM DV TLS CA - G2A-1), 8 more by emSign — consistent with the documented IDRBT→eMudhra procurement trail. India's banking-PK heritage CA is effectively off the air.
.bank.in TLS handshakes is byte-identical to the repository copy; the TrustCheck app's bundled G3 fixture decodes to the same root archived here. One chain of custody, three independent capture paths.
How to verify
git clone https://github.com/CashlessConsumer/india-pki-watch.git cd india-pki-watch sha256sum -c cca-gov-in/2026-10-30-root-certs/SHA256SUMS.txt # needs cwd fix; see script bash scripts/check_ccaindia.sh # re-fetches live certs, diffs vs latest snapshot bash scripts/check_emsignrepo.sh # re-fetches all published certs, checks vs published fingerprints
A byte mismatch can indicate a re-issue; a new or removed file is a corpus change that must be investigated separately. git log the snapshot dirs for the last-known-good bytes and diff. A weekly checker alerts on either condition — snapshots are only ever added, never edited.
What we deliberately don't collect
- TLS leaf certificates — Certificate Transparency logs already archive every publicly-trusted cert with third-party timestamping; duplicating crt.sh adds nothing.
- Browser/OS trust-store mirrors — Mozilla publishes their list; we track deltas relevant to India, not blobs.
- Private keys or anything containing personal data — certificates are public objects; documents are not.
Context
This archive backs CashlessConsumer's eMudhra investigation and the cyber desk generally. The related app TrustCheck lets any Android user test whether their phone still trusts the compromised chains. Reach: github.com/CashlessConsumer/india-pki-watch · Pages: cashlessconsumer.github.io/india-pki-watch.