caddy 是一个强大的 站点托管 和 站点反向代理 的工具,但由于其默认的 tls证书申请方式 需要用到公网,所以自己的站点在局域网中使用的时候就只能用 80 端口。
在如今全民 https 的情况下,用这种方式显然不是很优雅。
于是就有了如下这篇简要的指导文档。
准备内容
- 本地已经托管好的某个端口的服务
- 已经解析到 内网IP 的 域名
- acme.sh 相关文档(点击前边的
acme.sh即可跳转到相关文档页)
相关步骤
- 安装
acme.sh到本地服务器
在已经有科学上网的情况下,通过如下方式即可将 acme.sh 安装到本地。直接在普通用户下安装即可,减少赋予权限太高所带来的风险。
安装的时候可以将邮箱 my@example.com 改为自己常用的邮箱。
1 | curl https://get.acme.sh | sh -s email=my@example.com |
因为安装的时候需要访问 github.com ,很多情况下是无法访问通的。
所以如果安装失败,可以参考如下 国内方式 进行安装。
需首先安装 git 。
1 | git clone https://gitee.com/neilpang/acme.sh.git |
- 准备申请证书时的相关参数
由于域名是映射的内网IP,所以需要使用 acme.sh 的 dns 方式来申请证书。
我的域名是托管在了 Cloudflare ,所以如下的参数处理方式是参考 Cloudflare 的。其他相关处理方式可以 参考这里 。
这里我需要准备两个参数,第一个是 API token,第二个是 Zone ID。
下边的步骤主要参考了 acme.sh 的相关文档。
- API token 的获取
获取 API token ,先点击 该链接 ,然后点击 Create Token。
然后选择 Edit zone DNS 的模板来进行创建。Permissions 选择 Zone > DNS > Edit , Zone Resources 选择 Include > Specific zone > 自己要申请证书的域名 。
然后创建即可。
最后会生成一个带有 数字,大小写字母,中划线 的字符串,将其保存下来。
- Zone ID 的获取
进入到 Cloudflare 的首页,点击自己的域名进入。
在页面右下角的 Zone ID 区域保存自己的 ID。
- 进行TLS证书申请
由于我本地使用的二级域名比较多,所以我申请的是一个泛域名
1 | # 设置刚刚保存的 API token |
- 在 caddy 中设置证书相关的内容
上边的证书申请好之后,证书会在 ~/.acme.sh/*.example.com_ecc 相关目录存储。
需要使用目录中的 .cer 和 .key 文件来指定证书。
如下为 Caddyfile 中的相关配置
1 | test1.example.com { |
- 重启 caddy ,即可以使用 https 来进行服务的访问了
后记
acme.sh 是支持 crontab 自动续期证书的,所以基本上不需要管什么。接下来就可以愉快的使用域名来访问本地IP的 https 服务了。
参考
- 本文标题:在域名是内网IP环境的下申请tls证书
- 创建时间:2024-01-05 11:09:26
- 本文链接:https://blog.212490197.xyz/article/tools/caddy/issue-tls-certificates-in-domains-with-intranet-ip/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!