服务器搭建记录 · 使用ACME.sh生成并自动续签免费证书

前言

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。

安装 acme.sh

安装很简单, 一个命令,它会执行以下操作,更高级的安装选项请参考文档

curl https://get.acme.sh
  • 把文件解压到~/.acme.sh
  • 创建一个shellalias,例如.bashrc,方便你的使用:alias acme.sh=~/.acme.sh/acme.sh
  • 注册一个cronjob来自动检测并更新证书

安装完成后要自行重启命令行,或重新加载.bashrc文件source ~/.bashrc)。

安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

签发证书

通过 acme.sh 可以签发单域名、多域名、泛域名证书,还可以签发 ECC 证书。

acme.sh 实现了 acme 协议支持的所有验证协议。一般有两种方式验证: HTTPDNS验证。

HTTP方式

这种方式会自动在网站根目录下放置一个文件,来验证你的域名所有权。完成验证后自动删除。

acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

只需要指定域名和域名所在的网站根目录即可。可添加多个-d从而指定多个域名。

使用不同方式签发不同域名:

acme.sh --issue -d example.com --dns dns_cf -d -d www.example.com --nginx

acme.sh还可以智能的从配置中自动完成验证,你不需要指定网站根目录:

acme.sh --issue -d mydomain.com --apache
acme.sh --issue -d mydomain.com --nginx /etc/nginx/nginx.conf //手动指定Nginx配置文件或网站配置文件

注意:无论是Apache还是Nginx模式,acme.sh在完成验证之后,会恢复到之前的状态。不会更改你的配置。

如果你没有安装HTTP服务器,acme.sh也可以临时建立服务器签发证书:

acme.sh --issue -d mydomain.com --standalone --httpport 80
acme.sh --issue -d mydomain.com --alpn --tlsport 443

可使用--httpport手动指定HTTP端口,使用--tlsport手动指定TLS端口

更高级的用法请参考文档

DNS方式

这种方式只需要DNS解析记录即可完成验证:

acme.sh --issue --dns -d mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后会生成相应的解析记录,只需要在你的域名管理面板中添加这条TXT记录即可。

等待解析完成之后,重新生成证书:

acme.sh --renew -d mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

如果不同时配置Automatic DNS API,使用这种方式将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

DNS API方式

DNS方式的真正强大之处在于可以使用域名解析商提供的API自动添加TXT记录。

以DNSPod为例,需要生成并使用你的API IDAPI Key,然后导入密钥:

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

再以CloudFlare为例,获取API KeyToken,然后导入密钥:

API Key可以全局也可以区域,区域API Key只需要Zone.DNS的编辑权限。

export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Account_ID="xxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxx"

配置信息会保存到~/.acme.sh/account.conf这个文件里,证书续期时会自动调用。

之后就可以一键签发了:

acme.sh --issue --dns dns_dp -d *.example.com
acme.sh --issue --dns dns_cf -d example.com

使用*进行泛域名签发(只适用于DNS方式)

更详细的API用法请参考文档

签发 ECC 证书

默认签发的都是基于RSA密钥加密的证书,RSA算法应用较早,适用范围广,兼容性更好,但是对服务端性能消耗高。ECC算法是新一代算法趋势主流,加密速度快,效率更高,对服务器资源消耗低,而且最重要的是更安全,抗攻击型更强。长远来看,RSA可能会被ECC取代。所以这里讲一下ECC证书的签发。

只需要添加--keylength/-k参数,手动指定ec-xxx算法即可:

acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-384

支持以下长度的证书:

  • ec-256 (prime256v1, “ECDSA P-256”)
  • ec-384 (secp384r1, “ECDSA P-384”)
  • ec-521 (secp521r1, “ECDSA P-521”) //Let’s Encrypt暂不支持

安装证书

acme.sh默认生成的证书都放在安装目录下,需要使用--install-cert命令指定位置安装:

注意:请不要直接使用acme.sh目录下的文件

acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"
acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

详细参数请参考文档。这个命令会被记录,在续期时自动调用。

到这里关于acme.sh的配置就完成了,只需要在 Apache / Nginx 里面指定证书路径就可以使用HTTPS了。

版权声明:此篇文章《服务器搭建记录 · 使用ACME.sh生成并自动续签免费证书》作者:湙凇。未经许可严禁转载,转载与引用请首先注明作者(湙凇)、出处(https://blog.yisrime.xyz/02/07/%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%90%ad%e5%bb%ba%e8%ae%b0%e5%bd%95-%c2%b7-%e4%bd%bf%e7%94%a8acme-sh%e7%94%9f%e6%88%90%e5%b9%b6%e8%87%aa%e5%8a%a8%e7%bb%ad%e7%ad%be%e5%85%8d%e8%b4%b9%e8%af%81%e4%b9%a6.html)以及此段内容。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇

版权所有 严禁复制