给 localhost 签发 https 证书

Jan 30 2019 tool

本文介绍一个可以给 localhost 签发 https 证书的工具 mkcert,而且使用特别简单。

工具下载地址:
https://github.com/FiloSottile/mkcert/releases/latest

或者工具包管理工具:

1
2
# mac
brew install mkcert

然后两步就可以生成 localhost 证书

1
2
3
4
# 添加 CA 信任
mkcert -install
# 生成证书到当前目录
mkcert 127.0.0.1 localhost

这样就可以给 localhost127.0.0.1 生成了一个证书,如果给其它域名,可以再往后面加参数即可。

然后重命名一下为 key.pemcert.pem 测试一下效果。

1
127.0.0.1+1-key.pem 127.0.0.1+1.pem # rename -> key.pem cert.pem

使用 Nodejs 试一试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const https = require("https");
const fs = require("fs");

const options = {
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.pem")
};

https
.createServer(options, (req, res) => {
res.writeHead(200);
res.end("hello world\n");
})
.listen(8000);

使用 curl 看一下结果,都正常连接了。

1
2
3
4
curl https://localhost:8000
# hello,world
curl https://127.0.0.1:8000
# hello,world

然后再换成 golang 试一试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

package main

import (
"io"
"log"
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "hello world\n")
})
log.Fatal(http.ListenAndServeTLS(":8000", "cert.pem", "key.pem", nil))
}

也是正常连接的。