Trust store generator scripts for various Gemini clients
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nervuri 6e7ffb76f5
update Lagrange trust store format
1 day ago
agunua fix IDN conversion failure in generator scripts 4 months ago
amfora fix IDN conversion failure in generator scripts 4 months ago
lagrange update Lagrange trust store format 1 day ago
LICENSE.txt init 5 months ago mention Agunua as an optional dependency 3 months ago remove extra space in $sig_algo 3 months ago
excluded-hosts add exclusion list for specific hosts, private IPs and reserved TLDs 3 months ago init 5 months ago add spacing to stderr output 3 months ago check for missing .onion capsules 1 day ago add script for pruning old certificates 3 months ago add script for pruning old certificates 3 months ago
test-hosts init 5 months ago

Gemini Trust Store Generators

Geminispace is (currently) small enough that we can afford to download all known capsules' TLS certificates and use them to generate trust stores for various Gemini clients. If verified via multiple network perspectives, using a pre-generated trust store is a major improvement over blindly trusting-on-first-use.

This repo contains scripts for:

  1. downloading a list of hosts from and Lupa
  2. downloading the TLS certificates of those hosts
  3. generating a table containing details about each certificate
  4. generating trust stores for various Gemini clients, currently:

Trust stores generated by these scripts can be found at


Required: OpenSSL, idn

Optional: torsocks (for .onion capsules and for double-checking certificates using a different network perspective) and Agunua (for downloading host lists more securely).

To install them in Debian, run: sudo apt install openssl idn torsocks and pip3 install agunua.


./ will run all scripts. For the trust stores repo, I use time ./ >log-stdout 2>log-stderr. For 893 hosts, the command takes around 80 minutes to complete with Tor verification and 45 minutes without. accepts tor as an optional argument, to double-check certificates using the Tor network. If you have torsocks installed, this option will automatically be used when you run ./

All trust store generators accept certificate expiry boundaries as arguments. Ex:

./          # all certs
./ 90+      # certs that will expire in more than 90 days from now
./ 30-      # certs that have expired more than 30 days ago
./ 30- 90+  # both of the above; in other words, certs are excluded if:
                       # {30 days ago} < cert_expiry < {90 days from now}

This is to assist client developers who wish to bundle pre-generated trust stores with their clients, but only want to include long-lived (and long-expired) certificates.

How to contribute

The project is hosted at If you don't want to make an account, just shoot me an email with your patch/suggestion/bug report/whatever else.