2019年7月14日,宝塔 Linux 最新版(博主用的宝塔是6.9.8版本)已经可以流畅申请 Let's Encrypt 泛域名证书,在宝塔面板左边菜单“网站”找到你的主网站,点右边的“设置”,找到“SSL”,点“Let’s Encrypt”标签页,选择“使用 DNS 验证”,“选择DNS接口”下拉菜单中选择你的域名运营商(博主的域名是阿里云,所以选的是阿里云DNS),填写阿里云的2个KEY并保存,勾选“自动组合泛域名”,填写管理员邮箱(申请成功会有邮件通知),勾选主域名,确定无误后点申请,耐心等待几分钟。
等它这样显示的时候,就表示已经成功了。
以下内容已无时效性,不用继续看了。
宝塔面板Linux平台的6.x版本已经发布,但对于Let’s Encrypt泛域名证书的支持貌似还没有完美解决,例如阿里云的DNS就不支持泛域名证书申请,笔者通过宝塔面板6.21测试几次都失败了。泛域名是类似*.zhanzhangb.com这样的域名证书,Let’s Encrypt官方早已经宣布支持了,LNMP已经在去年发布的1.4版中支持一键申请与自动续期。
Let’s Encrypt是免费SSL证书中最棒的,也是站长帮网站采用的证书(LNMP1.5一键申请的Let’s Encrypt泛域名证书),同时也极力推荐给各位站长。
Let’s Encrypt唯一的缺点是证书只有90天有效期,所以实现自动续期是很多站长希望的。
宝塔面板预计后续会提供吧,目前宝塔面板通过文件验证方式申请Let’s Encrypt单域名证书并自动续期是没问题的。本文将介绍一种方式在宝塔面板中实现Let’s Encrypt泛域名证书申请及自动续期,其实宝塔面板已经安装了acme.sh,所以安装acme.sh的步骤可以跳过。
通过acme申请Let’s Encrypt证书支持的域名DNS服务商有以下这些(国内用户较多的):cloudxns、dnspod、aliyun(阿里云)、cloudflare、linode、he、digitalocean、namesilo、aws、namecom、freedns、godaddy、yandex。
下面以阿里云为例,先登陆阿里云,查看API KEY和SECRTET KEY,网址是:https://ak-console.aliyun.com/#/accesskey
然后在宝塔面板中找到:宝塔SSH终端
输入以下指令:
export Ali_Key="123456"
export Ali_Secret="abcdef"
其中的KEY和Secret的值请替换成自己的。
执行完这两条指令后,开始签发证书并设置自动续期,执行:
~/.acme.sh/acme.sh --issue -d zhanzhangb.com -d *.zhanzhangb.com --dns dns_Ali
记住,替换成自己的域名哦,后面的dns_Ali代表是阿里云DNS。如果是其它DNS,请继续往下看。
如果未提示错误,就申请成功了。根据提示,找到证书所在目录,大概应该是:/www/server/panel/vhost/cert/域名目录下,用Notepad++打开fullchain.cer(证书文件)与zhanzhangb.com.key(密钥文件)两个文件,将文件内容复制粘贴到宝塔面板——网站——设置——SSL——其它证书,如下图:
然后在证书夹中可以看到刚申请的证书,点击部署后,即可开启HTTPS了。这个时候宝塔面板用的证书不会实现自动续期,因为自动续期的证书是/www/server/panel/vhost/cert/域名目录下的,而不是我们粘贴出来的这个。所以需要修改一下网站配置文件,将里面的证书路径修改一下。
ssl_certificate /www/server/panel/vhost/cert/zhanzhangb.com/fullchain.cer;
ssl_certificate_key /www/server/panel/vhost/cert/zhanzhangb.com/zhanzhangb.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
ssl_certificate和ssl_certificate_key的路径要改成自己的证书实际路径,千万别填错了,否则会造成无法访问。
到此完成了所有操作,实现了Let’s Encrypt泛域名证书和自动续期。检查是否自动续期成功,可以在宝塔面板SSH终端中执行crontab -l
命令查看,如下图:
如果出现以上内容说明自动续期已设置,如果没有任何内容,也可以手动添加。宝塔面板——计划任务——Shell脚本:acme.sh --renew -d example.com -d *.example.com --force
,如下图:
阿里云DNS之外的域名DNS实现方式:
cloudxns:服务商简称cx,所需的API参数:export CX_Key=”123456″ export CX_Secret=”abcdef” 获取API参数地址:https://www.cloudxns.net/AccountManage/apimanage.html 示例:文中提到的export Ali_Key=”123456″改成:CX_Key=”123456″,~/.acme.sh/acme.sh –issue -d zhanzhangb.com -d *.zhanzhangb.com –dns dns_Ali改成:~/.acme.sh/acme.sh –issue -d zhanzhangb.com -d *.zhanzhangb.com –dns dns_CX
dnspod (大陆版):服务商简称dp,所需的API参数:export DP_Id=”123456″ export DP_Key=”abcdef”
服务商名称
cloudxns
服务商简称
cx
所需API参数
export CX_Key="123456"
export CX_Secret="abcdef"
服务商名称
dnspod (cn大陆版)
服务商简称
dp
所需API参数
export DP_Id="123456"
export DP_Key="abcdef"
服务商名称
aliyun
ali
export Ali_Key="123456"
export Ali_Secret="abcdef"
服务商名称
cloudflare
cf
export CF_Key="123456"
export CF_Email="abc@example.com"
服务商名称
linode
linode
export LINODE_API_KEY="123456"
服务商名称
he
he
export HE_Username="username"
export HE_Password="password"
服务商名称
digitalocean
dgon
export DO_API_KEY="123456"
服务商名称
namesilo
namesilo
export Namesilo_Key="123456"
服务商名称
aws
aws
export AWS_ACCESS_KEY_ID=123456
export AWS_SECRET_ACCESS_KEY=abcdef
服务商名称
namecom
namecom
export Namecom_Username="username"
export Namecom_Token="123456"
服务商名称
freedns
freedns
export FREEDNS_User="username"
export FREEDNS_Password="password"
服务商名称
godaddy
gd
export GD_Key="123456"
export GD_Secret="abcdef"
服务商名称
yandex
yandex
export PDD_Token="abcdef"