最近在服务器上搭建ngrok服务时,使用了自签的ssl证书,发现无法通过https访问,提示证书无效。但在阿里云申请的免费证书又只能签一个域名,没法同时签根域名和子域名,这样会导致客户端连不上。因此, Let's Encrypt出场了。
(本文适合对已经搭建过ngrok服务的读者,木有搭建过的请先按照其他博文搭建后再来观看~)
什么是 Let's Encrypt
Let's Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。
简单的说,借助 Let's Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。
证书申请
我们需要安装 Certbot 客户端来签发证书。先到https://certbot.eff.org网站选择对应的服务器、软件类型去安装。比如我的是centos,
然后网站会给出相应的命令,复制命令执行就可以了。
因为本人比较懒,所以以申请通配符证书为例,申请通配符证书的话,你的所有子域名都可以用这个证书,不用重复申请。
安装好certbot之后,执行下面的命令就可以申请了。申请的过程中会要求你更新dns的解析记录,按提示来就行,这个不难。
./certbot-auto certonly -d *.xxx.com -d xxx.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
申请成功后,找到这两个文件
然后复制到ngrok里保存服务器证书的文件夹下并重命名,privkey重命名为snakeoil.key,fullchain的重命名为snakeoil.crt。
接着再打开保存客户端证书的文件夹,报snakeoil.crt复制进去并重命名为ngrokroot.crt
然后执行ngrok命令生成服务端和客户端
make release-server release-client
再执行命令生成windows客户端
GOOS=windows GOARCH=amd64 make release-client
为了方便,把上面的两个证书文件复制到ngrok文件夹下,按下图重命名,然后启动
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443"
我们就可以愉快的通过https内网穿透了~