Nginx 实现全站 HTTPS(基于 Let's Encrypt 的免费通配符证书)

ACME 协议支持的验证协议一般有两种:

http 验证:必须有可以正常运行的服务器和公网 IP。验证时,需要在你的网站根目录下放一个文件来验证域名所有权,完成验证后就可以生成证书了。
dns 验证:不需要服务器和公网 IP。只需要为域名添加一条 txt 解析记录来验证域名所有权。

通过 acme.sh 获取通配符域名证书

acme.sh 的所有相关文件(包括安装文件、申请到的证书等)都在 ~/.acme.sh/ 这一个目录中。

安装 acme.sh
在线安装
curl https://get.acme.sh | sh
或者:
wget -O - https://get.acme.sh | sh

从 Git 安装
git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install

安装过程包含 3 个动作:

创建并复制 acme.sh 到你的家目录 $HOME:~/.acme.sh/。所有的证书都会放到这个目录中
创建别名: acme.sh=~/.acme.sh/acme.sh
创建每天的定时任务检查证书,如果快要到期了会自动更新
定时任务示例:

0 0 * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null

验证
安装完成后,需要重新打开终端,acme.sh 命令才能生效。
root@v1:~# acme.sh -h

生成证书

http 方式

acme.sh 会自动在网站根目录生成验证文件, 然后自动完成验证,最后自动删除验证文件。

需要指定域名和域名对应的网站根目录:

acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
对于 nginx 服务器,acme.sh 还可以智能的从 nginx 配置中自动完成验证,不需要指定网站根目录:

acme.sh --issue -d mydomain.com --nginx
域名获取后,需要手动修改 Nginx 配置文件。

如果没有运行任何 web 服务,80 端口是空闲的,那么 acme.sh 可以运行为 webserver,临时监听 80 端口,完成验证:

acme.sh --issue -d mydomain.com --standalone
dns 方式

如果域名解析商提供 API,则可以自动借助这个 API 通过工具添加 txt 记录完成验证。

对于阿里云:

替换成从阿里云获取的 API 参数

export Ali_Key="666"
export Ali_Secret="888"

换成自己的域名

acme.sh --issue --dns dns_ali -d kikakika.com -d *.kikakika.com

对于腾讯云:

替换成从 DNSPod 获取的 API 参数

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

换成自己的域名

acme.sh --issue --dns dns_dp -d kikakika.com -d *.kikakika.com

对于其他平台,可以 参考这里
DNS 生效需要一段时间,acme.sh 设置的是等待两分钟。

acme.sh 会保存 API 参数并生成定时任务,用于每天验证证书是否即将过期,并及时更新。下面是通过 crontab -e 看到的新增的定时任务:

16 0 * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

安装证书

证书生成后,需要把证书 copy 到真正需要用它的地方。

默认生成的证书都放在安装目录 ~/.acme.sh/ 下,但是请不要直接使用。而是使用 --installcert 命令安装证书。

使用 --installcert 命令安装证书

使用 --installcert 命令安装证书时,证书文件会被复制到相应的位置:

acme.sh --installcert -d kikakika.com \
--key-file /etc/nginx/ssl/kikakika.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "systemctl reload nginx.service"

配置 Nginx

Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer,而非 /etc/nginx/ssl/<domain>.cer,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

我将所有流量统一导入 https://www.kikakika.com,示例如下:

server {
listen 443 ssl;
server_name www.kikakika.com;
index index.html;
root /home/kikakika/www;

ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/kikakika.key;
ssl_session_timeout 5m;

}

转载于:https://blog.51cto.com/alca0126/2308774

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值