最近在学习caddy2 的一些新特性,以前大致看过step-ca 这个强大的证书管理工具,所以集成caddy+step-ca 的acme 进行测试下
因为acme 需要对于dns 进行校验,但是因为自己是本地测试,解决方法有:修改本地hosts 文件,后者配置自己的dns server ,对于
自己的dns server coredns 是一个很不错的选择(可以同时集成mysql 扩展,这样就可以灵活的处理dns 记录了)
参考集成图
集成运行说明
上图已经说明了,基于step-ca 启动自己的acme server ,然后就是caddyserver 的一些配置了,运行上我没有使用容器
- step ca 环境准备
下载软件包,具体参考自己的环境
初始化(按照提示操作,选择标准本地运行模式)
step ca init
启动step ca 服务
step-ca $(step path)/config/ca.json
客户端访问root ca (ca-url 就是上边的,需要使用https)
step ca bootstrap --ca-url [CA URL] --fingerprint [CA fingerprint]
安装本地root ca (方便测试,以及更新信息)
step certificate install $(step path)/certs/root_ca.crt
添加acme 功能(注意之后需要重启下step ca 服务,因为都是基于配置文件的)
step ca provisioner add acme --type ACME
添加测试hosts 文件
127.0.0.1 example.com
127.0.0.1 exampleappdemo.com
- caddyserver 配置
参考配置内容
{
"apps": {
"tls": {
"automation": {
"policies": [
{
"issuers": [
{
"ca": "https://localhost:9000/acme/acme/directory",
"email": "[email protected]",
"module": "acme",
"trusted_roots_pem_files": [
"/Users/dalong/.step/certs/root_ca.crt"
]
}
],
"disable_ocsp_stapling": true
}
]
}
},
"http": {
"servers": {
"example": {
"listen": [":2015"],
"routes": [
{
"match": [
{
"host": ["example.com"]
}
],
"handle": [
{
"handler": "static_response",
"body": "Hello, world! from example.com"
}
]
},
{
"match": [
{
"host": ["exampleappdemo.com"]
}
],
"handle": [
{
"handler": "static_response",
"body": "Hello,world! from exampleappdemo.com"
}
]
}
]
}
}
}
}
}
启动caddyserver (可以按需配置自己的tls 存储路径,比如export XDG_DATA_HOME=$PWD/conf)
caddy run
通过admin api 添加配置
curl localhost:2019/load \
-H "Content-Type: application/json" \
-d @caddy.json
- 自动证书获取效果
caddyserver 日志信息
证书文件
说明
以上是一个简单的测试集成,关于coredns 部分以上没有说明,实际在我们进行一些测试环境中就会需要了,同时以上关于step-ca 的部署是本地模式,也不适合远程访问,对于实际生产玩法官方也有文档说明可以参考
参考资料
https://smallstep.com/docs/tutorials/acme-protocol-acme-clients
https://caddyserver.com/docs/caddyfile/options
https://smallstep.com/docs/step-ca/acme-basics
https://caddyserver.com/docs/json/apps/tls/