# Eigene CA und lokales Zertifikat erstellen

Für Tests ist es sinnvoll, Serveranwendungen auch unter https zu testen. Um das auf dem Entwicklungsrechner zu tun, benötigt man ein lokales Zertifikat und möglichst auch eine eigene CA, damit das Zertifikat auch ohne die lästigen Warnungen akzeptiert wird.

Auf einem Mac oder jedem anderen System mit Homebrew kann das mit brew erledigt werden. Zuerst aktualisiert man brew:

```shell
brew update && brew upgrade
```

Danach installiert man das Tool mkcert:

```bash
brew install mkcert
```

Damit mkcert das neu erstellte Zertifikat bzw. die CA in Firefox installieren kann, benötigt mkcert noch das Tool certutil aus dem Cask nss. Wird also auch mit Firefox getestet, ist nss noch zu installieren:

```shell
brew install nss
```

 Nun kann eine CA und ein Zertifikat für localhost erstellt werden:

```bash
mkcert -install
mkcert localhost 127.0.0.1 ::1
```

Der Befehl `mkcert -install` kann übrigens beliebig oft wiederholt werden.

Um die erzeugten &lt;name&gt;.pem- und &lt;name-key&gt;.pem Dateien in &lt;name&gt;.crt und &lt;name&gt;.key Dateien umzuwandeln, wird openssl genutzt.

```bash
openssl x509 -in localhost.pem -out localhost.crt
openssl pkey -in localhost-key.pem -out localhost.key
```

Einsatz z. B. in einer Go-Anwendung mit dem Echo Framework:

```go
func main() {
	e := echo.New()
	// add middleware and routes
	// ...

	sc := echo.StartConfig{Address: ":1323"}
	if err := sc.StartTLS(context.Background(), e, "localhost.crt", "localhost.key"); err != nil {
		e.Logger.Error("failed to start server", "error", err)
	}
}
```