• Stars
    star
    48,512
  • Rank 240 (Top 0.01 %)
  • Language
    Go
  • License
    BSD 3-Clause "New...
  • Created over 6 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A simple zero-config tool to make locally trusted development certificates with any names you'd like.

mkcert

mkcert is a simple tool for making locally-trusted development certificates. It requires no configuration.

$ mkcert -install
Created a new local CA πŸ’₯
The local CA is now installed in the system trust store! ⚑️
The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊

$ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1

Created a new certificate valid for the following names πŸ“œ
 - "example.com"
 - "*.example.com"
 - "example.test"
 - "localhost"
 - "127.0.0.1"
 - "::1"

The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" βœ…

Chrome and Firefox screenshot

Using certificates from real certificate authorities (CAs) for development can be dangerous or impossible (for hosts like example.test, localhost or 127.0.0.1), but self-signed certificates cause trust errors. Managing your own CA is the best solution, but usually involves arcane commands, specialized knowledge and manual steps.

mkcert automatically creates and installs a local CA in the system root store, and generates locally-trusted certificates. mkcert does not automatically configure servers to use the certificates, though, that's up to you.

Installation

Warning: the rootCA-key.pem file that mkcert automatically generates gives complete power to intercept secure requests from your machine. Do not share it.

macOS

On macOS, use Homebrew

brew install mkcert
brew install nss # if you use Firefox

or MacPorts.

sudo port selfupdate
sudo port install mkcert
sudo port install nss # if you use Firefox

Linux

On Linux, first install certutil.

sudo apt install libnss3-tools
    -or-
sudo yum install nss-tools
    -or-
sudo pacman -S nss
    -or-
sudo zypper install mozilla-nss-tools

Then you can install using Homebrew on Linux

brew install mkcert

or build from source (requires Go 1.13+)

git clone https://github.com/FiloSottile/mkcert && cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"

or use the pre-built binaries.

curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert

For Arch Linux users, mkcert is available on the official Arch Linux repository.

sudo pacman -Syu mkcert

Windows

On Windows, use Chocolatey

choco install mkcert

or use Scoop

scoop bucket add extras
scoop install mkcert

or build from source (requires Go 1.10+), or use the pre-built binaries.

If you're running into permission problems try running mkcert as an Administrator.

Supported root stores

mkcert supports the following root stores:

  • macOS system store
  • Windows system store
  • Linux variants that provide either
    • update-ca-trust (Fedora, RHEL, CentOS) or
    • update-ca-certificates (Ubuntu, Debian, OpenSUSE, SLES) or
    • trust (Arch)
  • Firefox (macOS and Linux only)
  • Chrome and Chromium
  • Java (when JAVA_HOME is set)

To only install the local root CA into a subset of them, you can set the TRUST_STORES environment variable to a comma-separated list. Options are: "system", "java" and "nss" (includes Firefox).

Advanced topics

Advanced options

	-cert-file FILE, -key-file FILE, -p12-file FILE
	    Customize the output paths.

	-client
	    Generate a certificate for client authentication.

	-ecdsa
	    Generate a certificate with an ECDSA key.

	-pkcs12
	    Generate a ".p12" PKCS #12 file, also know as a ".pfx" file,
	    containing certificate and key for legacy applications.

	-csr CSR
	    Generate a certificate based on the supplied CSR. Conflicts with
	    all other flags and arguments except -install and -cert-file.

Note: You must place these options before the domain names list.

Example

mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com

S/MIME

mkcert automatically generates an S/MIME certificate if one of the supplied names is an email address.

Mobile devices

For the certificates to be trusted on mobile devices, you will have to install the root CA. It's the rootCA.pem file in the folder printed by mkcert -CAROOT.

On iOS, you can either use AirDrop, email the CA to yourself, or serve it from an HTTP server. After opening it, you need to install the profile in Settings > Profile Downloaded and then enable full trust in it.

For Android, you will have to install the CA and then enable user roots in the development build of your app. See this StackOverflow answer.

Using the root with Node.js

Node does not use the system root store, so it won't accept mkcert certificates automatically. Instead, you will have to set the NODE_EXTRA_CA_CERTS environment variable.

export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"

Changing the location of the CA files

The CA certificate and its key are stored in an application data folder in the user home. You usually don't have to worry about it, as installation is automated, but the location is printed by mkcert -CAROOT.

If you want to manage separate CAs, you can use the environment variable $CAROOT to set the folder where mkcert will place and look for the local CA files.

Installing the CA on other systems

Installing in the trust store does not require the CA key, so you can export the CA certificate and use mkcert to install it in other machines.

  • Look for the rootCA.pem file in mkcert -CAROOT
  • copy it to a different machine
  • set $CAROOT to its directory
  • run mkcert -install

Remember that mkcert is meant for development purposes, not production, so it should not be used on end users' machines, and that you should not export or share rootCA-key.pem.

More Repositories

1

age

A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.
Go
16,957
star
2

yubikey-agent

yubikey-agent is a seamless ssh-agent for YubiKeys.
Go
2,644
star
3

Heartbleed

A checker (site and tool) for CVE-2014-0160
Go
2,307
star
4

whoami.filippo.io

A ssh server that knows who you are. $ ssh whoami.filippo.io
Go
2,218
star
5

passage

A fork of password-store (https://www.passwordstore.org) that uses age (https://age-encryption.org) as backend.
Shell
790
star
6

gvt

gvt was a minimal go vendoring tool, based on gb-vendor. Today, you want to use modules instead.
Go
730
star
7

homebrew-musl-cross

Homebrew Formula for static-friendly musl-based GCC macOS-to-Linux cross-compilers
Ruby
558
star
8

captive-browser

A dedicated Chrome instance to log into captive portals without messing with DNS settings.
Go
434
star
9

awesome-age

A collection of projects and resources in the age file encryption ecosystem.
322
star
10

mostly-harmless

A bag of various unrelated projects with varying levels of serviceability and destructiveness.
JavaScript
221
star
11

CVE-2016-2107

Simple test for the May 2016 OpenSSL padding oracle (CVE-2016-2107)
Go
185
star
12

vendorcheck

Check that all your Go dependencies are properly vendored
Go
178
star
13

edwards25519

filippo.io/edwards25519 β€” A safer, faster, and more powerful low-level edwards25519 Go implementation.
Go
133
star
14

mlkem768

A Go implementation of the quantum-resistant key encapsulation method ML-KEM (formerly known as Kyber).
Go
131
star
15

sunlight

A Certificate Transparency log implementation and monitoring API designed for scalability, ease of operation, and reduced cost.
Go
125
star
16

ed25519-dalek-rustgo

Wrapper for curve25519-dalek using rustgo, a technique to directly call Rust code from Go programs with near-zero overhead, meant to replace manually written assembly.
Go
121
star
17

tracetools

Tools to process Go trace logs into various profiles. Complement for "go tool trace".
Go
111
star
18

typage

A TypeScript implementation of the age file encryption format, based on libsodium.
TypeScript
97
star
19

zcash-mini

A minimal portable Zcash z-address generator for offline / paper wallets
Go
96
star
20

BERserk

A Go implementation of the BERserk attack against Mozilla NSS ASN.1 parsing of PKCS#1 RSA signatures with e = 3. Complete of a certificate generation tool, works with CAs in the trust store.
Go
94
star
21

hstools

Library and tools to interact with and analyze Tor HSDirs.
Go
72
star
22

homebrew-gomod

A brew command to cleanly install binaries from Go modules.
Shell
68
star
23

blockchainr

Exploiting ECDSA Failures in the Bitcoin Blockchain
Go
61
star
24

openbsd-fde-crack

Some code to bruteforce OpenBSD softraid encrypted drives - NOT A READY-TO-USE TOOL
Go
57
star
25

intermediates

Package filippo.io/intermediates embeds a bundle of known unexpired, unrevoked intermediate certificates chaining to roots in the Mozilla Root Program
Go
55
star
26

travis-cron

This web app allows you to trigger Travis CI builds periodically
Python
55
star
27

gorebuild

Extract the import path of Go binaries and rebuild them. No more stale GOROOT.
Go
54
star
28

nistec

NIST P elliptic curves (re-exported from crypto/internal/nistec)
Assembly
47
star
29

otherport

LD_PRELOAD hack to redirect connections to other ports
C
42
star
30

powersoftau

An independent implementation of the Powers of Tau MPC ceremony.
Go
33
star
31

HNTitles

Tweet probabilistically generated HN post titles.
Python
29
star
32

go-cpace-ristretto255

An EXPERIMENTAL Go implementation of the CPace PAKE, instantiated with the ristretto255 group.
Go
28
star
33

alum

A forwarding mail server inspired by @alum.mit.edu
Go
18
star
34

xaes256gcm

Package xaes256gcm implements the XAES-256-GCM extended-nonce AEAD.
Go
18
star
35

FiloSottile

18
star
36

keygen

Deterministic key generation for Go.
Go
17
star
37

axel

Axel Download Accelerator [git mirror]
C
15
star
38

b2

Efficient, idiomatic Go library for Backblaze B2 Cloud Storage.
Go
13
star
39

bigmod

A constant-time library for big integers modulo a prime, usable for cryptographic applications. Exported from crypto/internal/bigmod, the backend of crypto/rsa and crypto/ecdsa.
Go
13
star
40

crypto.py

A collection of pure Python crypto implementations. All modules are standalone. Available in Python 2 and Python 3 flavors!
Python
10
star
41

litetlog

A collection of liteweight transparency logging tools, compatible with the Sigsum and Omniwitness ecosystems.
Go
8
star
42

Pendolo-OpenCV

C++
6
star
43

Griffith

Media collection manager [MIRROR]
Python
5
star
44

blog.filippo.io

blog.filippo.io theme. Slightly tweaked 0.9.4 Casper. Pretty please, don't just clone it <3
CSS
4
star
45

homebrew-lite

Modified homebrew-core formula with fewer dependencies.
Ruby
3
star
46

torspec

Forked from git.torproject.org/torspec.git
Python
2
star
47

.github

2
star
48

hs-api-playground

Playground for the Hacker School API
Python
1
star
49

WPA-hazard

Deep into the default WPA generation algorithms
C
1
star
50

homebrew-age

1
star
51

filosottile.github.io

An empty repository for redirecting filosottile.github.io to filippo.io (https://github.com/FiloSottile/filippo.io).
1
star
52

crypto-tls-bogo-shim

A shim to test Go crypto/tls with the BoringSSL test suite. Which is based on crypto/tls. So meta.
Go
1
star