A GTK 4 Certification Authority manager
View the Project on GitHub davefx/gnoMint
Adapted from the original “gnoMint tutorial” by David Marín, written circa 2008 and recovered from web.archive.org. The text has been updated for recent gnoMint releases, with fresh screenshots from the current version. The user manual covers the same actions without the worked example.
This tutorial walks you through using gnoMint to set up the Public Key Infrastructure for a small firm. We assume:
We will use a single self-contained gnoMint database to hold all certificates issued for the firm.
Before launching any application, let’s think about the CA we’re going to create. In this example we want a single Root Certification Authority for the firm, so all issued certificates live in one database. The Root CA will only issue subordinate CA certificates, which will be specialised — it’s a recommended practice for a given CA to issue certificates with consistent properties.
We’ll create three subordinate CAs:
Migration note: if you already have a PKI built with OpenSSL (the
openssl cascript, tinyCA, OpenVPN’seasy-rsa, etc.), gnoMint has been able to import it into a.gnomintdatabase since version 0.6.0.
Install the latest gnoMint (see the install guide), then launch it:
$ gnomint &
The main window opens with the default database
(~/.local/share/gnomint/default.gnomint on current versions, the
legacy ~/.gnomint/default.gnomint on older).

Choose Certificates → Add → Add self-signed CA. The “new CA properties” dialog appears.

Pick a key algorithm. RSA is the historical safe default; gnoMint 1.4.0 added ECDSA (P-256/P-384/P-521) and Ed25519 too. The original 2008 tutorial chose RSA 4096 (or 5120) for a long-lived root — for modern hardware ECDSA P-384 or Ed25519 give equivalent security at smaller sizes.

Press OK. Key generation runs in a worker thread; you’ll see a progress dialog. When it finishes, the new Root CA appears in the tree.
A small seal icon next to the certificate marks it as a Certification Authority (allowed to sign other certificates). A keys icon marks rows whose private key lives inside the database — that’s a security consideration we address next.
Anyone with a copy of the .gnomint file holding a private key can
issue certificates with that key. gnoMint offers two complementary
mitigations:
The two are not mutually exclusive — it’s reasonable to use both. For this tutorial we’ll take the simpler option (in-database with passphrase). Choose Certificates → Change Database Password, set a new passphrase, confirm, and the database is protected.

Now we configure the policies for the Root CA. Policies decide what the CA is allowed to sign and what defaults its issued certificates inherit.
Double-click the Root CA (or select it and pick Edit → Properties) and open the third tab. Configure:
With the Root configured, we create three CSRs (certificate signing requests) — one per subordinate CA. Each CSR will be signed by the Root CA to produce the subordinate’s certificate.
Choose Certificates → Add → Add Certificate Request.

If the database is password-protected, gnoMint asks for the passphrase before saving the CSR’s private key.
If you don’t see your CSR after creating it, check View → Certificate Signing Requests — the filter may be hiding them.
Repeat for the Employees CA and the Software Signing CA, so you end up with three CSRs in the database.
Now sign each CSR with the Root CA to produce the subordinate CA certificates.
Select a CSR and choose Certificates → Sign (or right-click the CSR and pick Sign). The wizard appears:
Press OK. gnoMint asks for the database passphrase (to access the Root’s private key), signs the CSR, and adds the new subordinate CA certificate to the tree.
Repeat for the other two CSRs. You now have three subordinate CAs, each ready for its specialised job.
Open each subordinate CA in turn and configure its policies.
There’s one exception: only the VPN-server node should have the TLS web server bit. You can either flip it off on each client cert at issuance time, or issue all the clients with the bit on and clear it afterwards. We’ll do the latter — easier to remember.
The employees need to do email signing and ciphering plus intranet TLS authentication.
The VPN will have one central server and three remote clients (the Barcelona, Madrid and Seville offices). We need four CSRs, all signed by the Systems CA.
A more secure approach is for each remote office to generate its own CSR locally and email you only the CSR — CSRs contain no private material so they can be sent over insecure channels. But for this worked example we’ll assume you (the only technical employee in the firm) are creating all of them.
For each VPN node:
vpn.example.com,
client-barcelona.example.com, …). Add the DNS SAN to match.Once the four CSRs are in the database, sign them with the Systems CA
(same workflow as before). You now have four VPN-node certificates plus
their private keys, all wrapped inside one .gnomint file.
For each VPN node, export:
Distribute the per-node certificate + key over a secure channel (SCP/SSH to each office is fine). Don’t ever copy a private key across an unencrypted link.
OpenVPN’s ca directive points at the Systems CA certificate, cert
at the per-node certificate, and key at the per-node private key.
The original tutorial ends here (“To be continued…”), but the user manual covers the rest of the day-to-day workflow: