备忘:网站泛域名证书+宝塔 服务器自定义SSL进行设置

搬瓦工机场JMS

参考文1:

1、let’s encrypt 证书颁发机构网址:
https://letsencrypt.org/zh-cn/
2、acme.sh 客户端开源代码地址:
https://github.com/acmesh-official/acme.sh
3、安装 acme.sh 客户端命令
curl  https://get.acme.sh | sh
4、添加一个bash的alias,方便执行命令
    1)在服务器的 /etc/profile 文件中添加下面这行内容
        alias acme.sh=~/.acme.sh/acme.sh
    2)添加好后保存文件,再在命令行执行以下命令让上述添加的内容生效
        source /etc/profile
    3)验证上述操作是否成功
        命令行执行以下命令,有使用说明输出即代表上述操作成功
        acme.sh –help
    4)到此,准备工作完成
5、acme.sh 客户端自动更新(可选)
由于 acme.sh 客户端以及相关协议在不断更新,因此 acme.sh 客户端也需要更新,配置自动更新的命令如下:
手动更新acme.sh命令      acme.sh –upgrade
开启自动更新acme.sh命令  acme.sh –upgrade –auto-upgrade
关闭自动更新acme.sh命令  acme.sh –upgrade –auto-upgrade 0
=====================================================
手动DNS验证方式申请证书(不会自动更新
1、执行手动申请的命令,其中 mydomian.com 为你自己的域名
acme.sh –issue –dns -d mydomain.com
2、执行上述操作后会有如下提示
It seems that you are using dns manual mode.
Read this link first: https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode
3、打开它提示的链接,按照提示执行命令
acme.sh –issue –dns -d mydomain.com –yes-I-know-dns-manual-mode-enough-go-ahead-please
4、手动添加 txt 类型的 DNS 解析
执行完上面步骤后,会让你在你的域名提供商那里添加一条执行的 txt 类型的 DNS 解析
按照提示操作即可
5、DNS解析,手动添加完成后,执行验证操作
acme.sh –renew –dns -d mydomain.com –yes-I-know-dns-manual-mode-enough-go-ahead-please
6、安装证书
acme.sh –installcert -d mydomain.com –fullchain-file /opt/cert.pem –key-file /opt/key.pem
【注意】上述手动 DNS 验证方式不支持SSL证书到期自动续签,每次证书到期后都要用以上步骤重新申请。
=====================================================
DNS API 验证方式申请SSL证书 (自动续签)
1、首先你的域名提供商要支持 DNS API方式
例如 CloudFlare DNSPod CloudXNS.com GoDaddy.com PowerDNS LuaDNS Aliyun 等等都支持
详情可以查看以下链接:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
2、将你域名提供商的 API key 添加到LINUX服务器
    1)在服务器的 /etc/profile 文件中添加你DNS账号的 API key 信息
        按照上述第一点的要求,根据不同的域名提供上,在 /etc/profile 中添加不同的内容
    2)添加好后保存文件,再在命令行执行以下命令让上述添加的内容生效
        source /etc/profile
3、开始申请证书(每个DNS服务商的命令不一样看上面的WIKI
acme.sh –issue –dns dns_cf -d mydomain.com
执行上述命令申请证书,不同的域名提供商上述参数是不同的,详情可以查看以下链接:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
如果申请证书不成功一般都是 API key 配置错了,仔细检查你的每一步操作,确保都操作对了,实在搞不定也可以使用其他方式申请证书。
4、安装证书
acme.sh –installcert -d mydomain.com –fullchain-file /path/cert.pem –key-file /path/key.pem –reloadcmd “xxxxxx”
由于此种方式支持 SSL 证书到期自动续签,因此
上述命令的 /path/cert.pem /path/key.pem 这两个证书路径,需要填写为你证书存放的最终路径
acme.sh会记住这个路径,下一次自动续签的证书也会存放在这里
同样 –reloadcmd “xxxxxx” 里面的”xxxxxx”参数的意思是证书申请完成后执行的命令
假设我的证书是给 docker 程序使用的,那么当证书过期后,acme.sh 自动重新申请了证书
此时就需要重新启动一下 docker 程序,那么参数就填写为
“systemctl restart docker” 每次重新申请了证书就会执行左边这条命令重启 docker 程序载入新的SSL证书
如果安装证书失败,可以将 –reloadcmd “xxxxxx” 删除,执行命令后直接在宝塔、服务器自定义SSL手动设置
【注意】上述DNS API 验证方式支持SSL证书到期自动续签,只要上述操作都执行正确了就无需再执行别的命令,证书到期后acme.sh会自动重新申请。

参考文2:

ACME自动续期Let’s Encrypt 免费SSL证书

安装

  1. curl https://get.acme.sh | sh
  2. #或者
  3. wget -O – https://freessl.cn/api/get.acme.sh | sh注册
  1. acme.sh –register-account –accountemail 80150348@qq.com \
    –server https://acme.freessl.cn/directory
自动 DNS API 集成
服务商名称服务商简称所需API参数获取API参数地址
cloudxnscxexport CX_Key=”123456″ export CX_Secret=”abcdef”点击访问
dnspod (cn大陆版)dpexport 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”点击访问

部署

  1. #一键申请证书
  2. ./acme.sh –issue –dns dns_ali -d *.haokaikai.cn
  3. #将证书部署到nginx
  4. ./acme.sh –install-cert -d *.haokaikai.cn \
  5. –key-file /data/ssl/haokaikai.cn/privkey.pem \
  6. –fullchain-file /data/ssl/haokaikai.cn/fullchain.pem \
  7. –reloadcmd “/bin/systemctl restart nginx.service
  8. #实现全自动
  9. ./acme.sh –force –issue –dns dns_ali \
  10. -d *.haokaikai.cn \
  11. –renew-hook “acme.sh \
  12. –install-cert -d haokaikai.cn \
  13. –key-file /data/ssl/haokaikai.cn/privkey.pem \
  14. –fullchain-file /data/ssl/haokaikai.cn/fullchain.pem \
  15. –reloadcmd \”/bin/systemctl restart nginx.service\””
    当我们的证书颁发完成之后,acme.sh 脚本会每天去检查它所管理的证书是否即将到期(过期前30天),此时,它将通过你上次申请该证书的方式重新申请证书。如果你也添加了 –renew-hook,从此就不管用管证书的是否到期了

说在前面

本文仅记录给自己的网站添加“小绿锁”的动手操作过程,不涉及 HTTPS 工作原理等内容的讲解,感兴趣的同学可以参考篇尾的文章自行了解。

简单了解下我的实验环境:

  • 云服务器:CentOS 7.4
  • 网站宿主:Nginx 1.12.2
  • 备案域名:www.esofar.cn

这里以www.esofar.cn作为演示域名,届时一定要修改为自己的域名。

什么是 Let’s Encrypt

Let’s Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。

简单的说,借助 Let’s Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。

Let’s Encrypt免费证书的签发/续签都是脚本自动化的,官方提供了几种证书的申请方式方法,点击此处 快速浏览。

官方推荐使用 Certbot 客户端来签发证书,这种方式可参考文档自行尝试,不做评价。

我这里直接使用第三方客户端 acme.sh 申请,据了解这种方式可能是目前 Let’s Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let’s Encrypt 中的免费证书。

安装 acme.sh

安装很简单,一条命令:

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

整个安装过程进行了以下几步,了解一下即可:

  1. 把 acme.sh 安装到当前用户的主目录$HOME下的.acme.sh文件夹中,即~/.acme.sh/,之后所有生成的证书也会放在这个目录下;
  2. 创建了一个指令别名alias acme.sh=~/.acme.sh/acme.sh,这样我们可以通过acme.sh命令方便快速地使用 acme.sh 脚本;
  3. 自动创建cronjob定时任务, 每天 0:00 点自动检测所有的证书,如果快过期了,则会自动更新证书。

安装命令执行完毕后,执行acme.sh --version确认是否能正常使用acme.sh命令。

  1. v2.7.9
    如有版本信息输出则表示环境正常;如果提示命令未找到,执行source ~/.bashrc命令重载一下环境配置文件。

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

生成证书

据 acme.sh 官方文档介绍,其实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http 和 dns 验证。

也就是我们有两种选择签发证书,这里我直接选择 http 验证方式,另外一种方式本篇不做介绍,可参考文档自行尝试。

签发证书也很简单,一条命令:

acme.sh --issue -d esofar.cn -d www.esofar.cn -w /home/wwwroot/esofar.cn

简单解释下这条命令涉及的几个参数:

  • --issue是 acme.sh 脚本用来颁发证书的指令;
  • -d--domain的简称,其后面须填写已备案的域名;
  • -w--webroot的简称,其后面须填写网站的根目录。

证书签发成功会有如下输出:

 

从截图看出,生成的证书放在了/root/.acme.sh/esofar.cn目录。

另外,可以通过下面两个常用acme.sh命令查看和删除证书:

  1. # 查看证书列表
  2. acme.sh –list
  3. # 删除证书
  4. acme.sh remove <SAN_Domains>
    至此,证书就下载成功。

安装证书

我的站点是由 Nginx 承载的,所以本节内容重点记录如何将证书安装到 Nginx,其他 webserver 请参考 acme.sh 文档自行实践。废话不多说,进入本节正题。

上一小节,生成的证书放在了/root/.acme.sh/esofar.cn目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件。

正确的做法就是使用--installcert命令,指定目标位置,然后证书文件会被 copy 到相应的位置。

一条命令即可解决:

acme.sh –installcert -d esofar.cn \

–key-file /etc/nginx/ssl/esofar.cn.key \

–fullchain-file /etc/nginx/ssl/fullchain.cer \
–reloadcmd “service nginx force-reload”
这里我将证书放到了/etc/nginx/ssl/目录下。

输出如下信息,则操作成功:

 

最后一步就是,修改 Nginx 配置文件启用 ssl,修改完成后需要重启下 Nginx,这一块不再详述。Nginx 配置请参考:

  1. server {
  2. listen 443 ssl;
  3. server_name esofar.cn;
  4. ssl on;
  5. ssl_certificate /etc/nginx/ssl/fullchain.cer;
  6. ssl_certificate_key /etc/nginx/ssl/esofar.cn.key;
  7. root /home/wwwroot/esofar.cn;
  8. index index.html;
  9. location / {
  10. try_files $uri $uri/ @router;
  11. index index.html;
  12. }
  13. location @router {
  14. rewrite ^.*$ /index.html last;
  15. }
  16. }
  17. server {
  18. listen 80;
  19. server_name esofar.cn;
  20. return 301 https://$server_name$request_uri;
}
完成证书部署后可以通过如下站点检测网站的安全级别:

更新证书

目前 Let’s Encrypt 的证书有效期是90天,时间到了会自动更新,您无需任何操作。 今后有可能会缩短这个时间, 不过都是自动的,不需要您关心。

但是,您也可以强制续签证书:

acme.sh --renew -d example.com --force

更新 acme.sh

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。

升级 acme.sh 到最新版:

acme.sh --upgrade

如果您不想手动升级,,可以开启自动升级:

acme.sh  --upgrade  --auto-upgrade

您也可以随时关闭自动更新:

acme.sh --upgrade  --auto-upgrade  0

acme申请证书报错:Please update your account with an email address first.的修复方法

出现以上错误的都给我老老实实去看官方说明!!!
acme.sh说明

其实日志已经提示了,第二行连用法都写出来了!

Please update your account with an email address first.
acme.sh –register-account -m my@example.com
1.先果断重新安装acme,卸载:

.acme.sh/acme.sh  –uninstall

安装 Acme 脚本之后,请先执行下面的命令(下面的邮箱为你的邮箱)

/acme.sh --register-account -m xxxx@xxxx.com

2.然后安装时别再忘记写邮箱了!

或:

curl  https://get.acme.sh | sh -s email=xxxx@xx.com

Cloudflare的最后再继续添加api密匙啥的环境变量等然后再申请。

未经允许不得转载:搬瓦工VPS_美国VPS » 备忘:网站泛域名证书+宝塔 服务器自定义SSL进行设置

赞 (1) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏