TypechoJoeTheme

主机评测

主机评测

专注服务器评测和优惠码发布

使用ACME申请SS_

2022-11-27
/
0 评论
/
989 阅读
/
百度已收录
11/27

现在的网站基本都是HTTPS协议,在浏览器中看着网站左上角有个小锁(网站连接安全),感觉都不一样。当然这都是小事,主要是想要提升一下资源访问性能,拥抱HTTP/2,但是浏览器就要求必须启用HTTPS才能正常接入HTTP/2。所以,把网站升级到HTTPS是很有必要。

网站想要升级到HTTPS,首先得申请下发个安全证书,现在下发证书很简单,方式也很多,很多域名提供商都提供免费证书申请。但是,很多证书都是有时间限制(3个月或者1年),时间到期就需要手动重新,手续麻烦而且还会忘记续期,如果想一劳永逸可以用工具自动生成证书并且自动续租。续租工具和方式也很多,本文将讲解用ACME实现证书申请和证书自动续期。

ACME安装

  1. curl https://get.acme.sh | sh

安装程序会自动做以下操作:

  • 自动把 acme.sh 安装到你的 home.acme.sh目录下,即~/.acme.sh/
  • 自动创建一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh
  • 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

更改默认证书

  1. acme.sh --set-default-ca --server letsencrypt

acme被ZeroSSL收购,其默认的证书方式为ZeroSSL,但此证书生成时会携带邮箱,因此更换为letsencrypt。

当然,也可以在生成证书时加一个--server参数来决定生成什么证书

  1. --server letsencrypt

生成证书

使用acme.sh --issue命令生成证书,但生成证书的同时会进行域名的所有权的验证。 acme.sh 有两种方式验证:http 和 dns 验证。

注意:如果需要生成泛域名(*.a.com)的证书,不能使用HTTP认证域名,需要改用DNS认证的方式

1)http验证方式

http方式需要通过

  • 或配置网站根目录,命令参数为(--webroot /home/wwwroot/mydomain.com/
  • 或关联服务器的nginx服务,命令参数为(--nginx
  • 或关联服务器的apache服务,命令参数为(--apache
  • 或自建虚拟webserver(服务器没有占用80端口),命令参数为(--standalone

来验证你的域名所有权来完成验证。

本服务器已搭建nginx服务,因此关联即可

  1. acme.sh --issue -d file.a.com -d www.a.com -d img.a.com --nginx

参数解析:

  • --issue命令参数生成证书
  • -d定义需要生成证书的域名,如有多个域名需使用多次,以上定了三个域名:file.a.com/www.a.com/img.a.com
  • 三个域名需要配置到nginx中,不一定都配置到同一个server中,所有域名都至少对应一个server,否则无法生成证书

    1. ...
    2. server {
    3. listen 80;
    4. server_name file.a.com www.a.com img.a.com;
    5. }
    6. ...

如果觉得麻烦可以使用第一种配置网站根目录。或者停止占用80端口的服务,然后通过添加--standalone参数,等生成证书后再启动原来的服务。如果服务器已有80端口的服务,不建议使用自建虚拟webserver,此方式续租时略麻烦需要改造。


2)dns 验证方式

需要在域名上添加一条 txt 解析记录, 验证域名所有权

方式1:手动添加记录
  1. 生成txt解析内容
  1. acme.sh --issue --dns -d mydomain.com \
  2. --yes-I-know-dns-manual-mode-enough-go-ahead-please

以上mydomain.com只是测试域名,如果多个域名,则需多次使用-d配置,如-d www.a.com -d img.a.com

  1. 把txt解析添加到域名管理面板中
  2. 重新生成证书
  1. acme.sh --renew -d mydomain.com \
  2. --yes-I-know-dns-manual-mode-enough-go-ahead-please

注意,重新生成使用的是renew参数,把生成txt解析内容命令的issue改为renew

方式2:域名提供商api自动解析

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

  1. 在域名提供商中,生成你的 api id 和 api key并记录,以dnspod为例

  1. 引入api id和key,以dnspod为例
  1. export DP_Id="1234"
  2. export DP_Key="sADDsdasdgdsf"

不同提供商,API参数值各不同,可参考下面的表格:自动 DNS API 集成

  1. 生成证书
  1. acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com

--dns的配置值也是根据域名提供商来决定,dns_dp表示dnspod。更多参数值可看下方表格

表:自动 DNS API 集成

服务商名称服务商简称所需API参数获取API参数地址
cloudxnscxexport CX_Key="123456" export CX_Secret="abcdef"点击访问
dnspod.cndpexport DP_Id="123456" export DP_Key="abcdef"点击访问
aliyunaliexport Ali_Key="123456" export Ali_Secret="abcdef"点击访问
cloudflarecfexport CF_Key="123456" export CF_Email="abc@example.com"点击访问
linodelinodeexport LINODE_API_KEY="123456"点击访问
heheexport HE_Username="username" export HE_Password="password"he的用户名密码
digitaloceandgonexport DO_API_KEY="123456"点击访问
namesilonamesiloexport Namesilo_Key="123456"点击访问
awsawsexport AWS_ACCESS_KEY_ID=123456 export AWS_SECRET_ACCESS_KEY=abcdef点击访问
namecomnamecomexport Namecom_Username="username" export Namecom_Token="123456"点击访问
freednsfreednsexport FREEDNS_User="username" export FREEDNS_Password="password"freedns的用户名密码
godaddygdexport GD_Key="123456" export GD_Secret="abcdef"点击访问
yandexyandexexport PDD_Token="abcdef"点击访问

更多dnsapi的使用,可以查看文档

(四)copy/安装 证书

默认生成的证书都放在安装目录下: ~/.acme.sh/,但是不要在web服务器中直接引用目录下的证书文件,也不要手动来拷贝证书文件到具体的web服务器中,手动拷贝会导致之后更新证书流程不能完全自动。

正确方式是使用acme.sh的安装证书命令,acme.sh自动拷贝证书文件到具体目录中,拷贝命令会被记录下来,之后自动更新证书流程也会执行此拷贝步骤,从而实现更新证书流程的完全自动化。

格式例子如下:

  1. acme.sh --install-cert -d xxx \
  2. --cert-file xxx \
  3. --key-file xxx \
  4. --fullchain-file xxx\
  5. --reloadcmd xxx

根据web服务器需要的文件按需引入对应的参数,reloadcmd定义证书更新后重启对应的web服务命令。

以nginx为例:

  1. acme.sh --install-cert -d www.a.com -d img.a.com \
  2. --key-file /etc/nginx/cert_file/key.pem \
  3. --fullchain-file /etc/nginx/cert_file/fullchain.pem \
  4. --reloadcmd "service nginx force-reload"

(五)web服务使用证书

通过上一步安装证书,已经把证书拷贝到目标的目录,接下来就是在web服务中使用证书即可。

以nginx为例:

  1. ...
  2. server {
  3. listen 443 ssl;
  4. ssl_certificate /etc/nginx/cert_file/fullchain.pem;
  5. ssl_certificate_key /etc/nginx/cert_file/key.pem;
  6. # ...
  7. }

更新证书

目前证书在 60 天以后会自动更新,你无需任何操作,因为在acme.sh安装时,已经把相关的自动更新程序写入到crontab中,如果想要查看,可以通过以下命令:

  1. crontab -l

输出内容包含一个自动更新程序,大致内容如下:

  1. 56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

停止自动更新

  1. acme.sh --remove -d example.com

或者手动在~/.acme.sh/目录下删除对应的域名目录,如~/.acme.sh/a.com

SSL证书ACME
朗读

赞 · 1
赞赏
感谢您的支持,我会继续努力哒!
打开手机扫一扫,即可进行打赏哦!
版权属于:

主机评测

本文链接:

https://zjpc.cc/1293.html(转载时请注明本文出处及文章链接)

评论 (0)
  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 阿鲁
  • 颜文字
火爆
火爆
火爆