Featured image of post 国内使用Caddy和CloudFlare实现SSL自动证书

国内使用Caddy和CloudFlare实现SSL自动证书

家庭服务器上面装了不少服务,一两个还好,但是多了之后证书的维护就是一件麻烦事(懒@(小乖)),而且免费证书一般只有三个月有效期,那更是麻烦。

本来Caddy本身是可以自动实现SSL自动证书的,但由于国情特色家里的公网IP无法使用80 443端口,只能通过acme dns challenge的方式自动申请证书和维护。一开始我的域名备案完整且托管在dnspod,结果 caddy 并没有适配国内的dnspod 模块无法使用,转而使用赛博菩萨Cloudflare。

前期准备

  1. 已经在服务器安装好Caddy软件且能够正常运行(默认不带caddy-dns/cloudflare模块)。
  2. 替换带caddy-dns/cloudflare模块的二进制文件,下载地址:https://caddyserver.com/download?package=github.com%2Fcaddy-dns%2Fcloudflare
    caddy-dns:cloudflare.png

下载完成手动替换caddy文件,并给予执行权限,最后手动执行caddy list-modules | grep cloudflare出现以下结果即说明安装替换成功。

1
2
3
root@homeserver:~# caddy list-modules | grep cloudflare
dns.providers.cloudflare
root@homeserver:~# 

Cloudflare 域名配置

  1. 将域名成功托管到Cloudflare,步骤略。
  2. 创建ApiToken,用于给Caddy自动完成TXT配置。

caddy-dns-cloudflare-api-token.png

安装如图流程创建Api令牌,注意权限设置。

配置文件

个人更喜欢Json风格,大概配置如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
{
    "admin": {
        "disabled": true
    },
    "logging": {
        "logs": {
            "default": {
                "writer": {
                    "output": "file",
                    "filename": "/var/log/caddy/access.log"
                },
                "encoder": {
                    "format": "console"
                },
                "level": "INFO"
            }
        }
    },
    "apps": {
        "http": {
            "http_port": 8880,
            "https_port": 8888,
            "servers": {
                "http": {
                    "listen": [
                        ":8888"
                    ],
                    "routes": [
                        {
                            "match": [
                                {
                                    "host": [
                                        "draw.vizan.one"
                                    ]
                                }
                            ],
                            "handle": [
                                {
                                    "handler": "reverse_proxy",
                                    "upstreams": [
                                        {
                                            "dial": "127.0.0.1:8802"
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            "match": [
                                {
                                    "host": [
                                        "mind.vizan.one"
                                    ]
                                }
                            ],
                            "handle": [
                                {
                                    "handler": "reverse_proxy",
                                    "upstreams": [
                                        {
                                            "dial": "127.0.0.1:8803"
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            "match": [
                                {
                                    "host": [
                                        "alist.vizan.one"
                                    ]
                                }
                            ],
                            "handle": [
                                {
                                    "handler": "reverse_proxy",
                                    "upstreams": [
                                        {
                                            "dial": "127.0.0.1:8804"
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            "match": [
                                {
                                    "host": [
                                        "tools.vizan.one"
                                    ]
                                }
                            ],
                            "handle": [
                                {
                                    "handler": "reverse_proxy",
                                    "upstreams": [
                                        {
                                            "dial": "127.0.0.1:8805"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            }
        },
        "tls": {
            "automation": {
                "policies": [
                    {
                        "subjects": [
                            "[你的域名]"
                        ],
                        "issuers": [
                            {
                                "module": "acme",
                                "email": "[你的邮箱]",
                                "challenges": {
                                    "dns": {
                                        "provider": {
                                            "name": "cloudflare",
                                            "api_token": "[你的Cloudflare API令牌]"
                                        },
                                        "resolvers": [
                                            "1.1.1.1",
                                            "1.0.0.1"
                                        ]
                                    }
                                }
                            }
                        ]
                    }
                ]
            }
        }
    }
}

按照以上的配置格式,修改为自己参数即可,最后systemctl restart caddy重启即可自动申请证书;如果有问题可以查看日志文件/var/log/caddy/access.log

效果展示

本文采用 CC BY 4.0 协议,转载请署名并注明出处。
最后更新于 2024-08-07 12:28:05
使用 Hugo 构建
主题 StackJimmy 设计