The tunnel worked, the interface came up, and the session stayed stable for a week. None of that tells you who built the installer. A VPN client runs with enough privilege to rewrite routes and read credentials, so the publisher is part of the threat model rather than a footnote.

Work the checks in order and stop at the first one that fails. They are cheap, and each one closes a different gap.

Step One: Download From the Channel the Project Names

Every project documents where its releases live, and that page is the reference. Community builds, store listings and vendor portals are all legitimate channels. Each one is legitimate only when the project itself points at it. That is the test, and it is not the same as looking official.

A file named after the project proves nothing. Renaming an installer is a one-second operation, and the name is what a search result shows first.

Step Two: Verify the Signature Against a Known Identity

Signature verification answers a narrow question well. It tells you that a particular identity signed this binary and that the binary has not changed since. It answers one question and refuses another. It cannot tell you whether that identity is the one you meant to trust.

# macOS: who signed this app, and is the signature intact?
codesign -dv --verbose=4 /Applications/Tunnel.app
spctl -a -vvv -t install /Applications/Tunnel.app

# Windows: signature and publisher of the installer
Get-AuthenticodeSignature .\tunnel-setup.exe | Format-List Status, SignerCertificate

# Linux: detached signature from the project's release page
gpg --verify tunnel-1.4.2.tar.gz.asc tunnel-1.4.2.tar.gz

Read the identity, not the status word. An unrelated developer with a valid certificate produces a valid signature. An operating system that reports a recognized publisher has told you only that somebody paid for a certificate.

Step Three: Compare the Hash With an Independent Source

A checksum proves agreement with a reference value. If the reference arrived next to the download, both can be wrong together and the comparison still passes. That is the failure mode in most tutorials. The hash sits on the same page as the file it describes.

# Linux and macOS
shasum -a 256 tunnel-1.4.2.dmg

# compare against the value published on the project's own release page
# not against a value copied from the same mirror

Where a project publishes signed checksums or a signed release manifest, verify the signature over the list rather than each file alone. That way one trusted reference covers the whole release.

After Installation: Keep the Update Path

A supported channel keeps mattering after the install finishes. Repackaged builds can carry their own updater, and that updater decides what runs next month. A build that never updates is not safer. It is simply older.

Record how the client is supposed to update and whether a management system owns that step. If the answer is a manual download from a forum, the supply chain question never really closed.

Two Origins, Not One

The client developer and the profile issuer are separate parties. An official client importing a profile from an unrelated operator is a normal arrangement, and the profile deserves its own scrutiny: who issued it, how it was delivered, and whether the server certificate matches the name you expect.

Keep both origins identifiable in your notes. The moment a client is replaced or a device is restored from backup, those two lines are what stops an unknown build or an unknown profile from returning with the rest of the data.

Аффингæй хæстæг статьялтæ