最近在学习caddy2 的一些新特性,以前大致看过step-ca 这个强大的证书管理工具,所以集成caddy+step-ca 的acme 进行测试下
因为acme 需要对于dns 进行校验,但是因为自己是本地测试,解决方法有:修改本地hosts 文件,后者配置自己的dns server ,对于
自己的dns server coredns 是一个很不错的选择(可以同时集成mysql 扩展,这样就可以灵活的处理dns 记录了)

参考集成图

caddyserver step-ca 集成_重启

 

 

 

集成运行说明

上图已经说明了,基于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": "dalong@example.com","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 日志信息

caddyserver step-ca 集成_重启_02

 

 

证书文件

caddyserver step-ca 集成_重启_03

 

 

说明

以上是一个简单的测试集成,关于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/​