前言
SSL/TLS 证书的主要功能是数据加密传输和服务器认证,以往的 HTTP 协议是以明文的方式传送内容,攻击者可以轻轻松松就能截取到传送的数据,非法获取重要信息;而HTTPS协议对数据进行加密处理之后才传送,攻击者无法监听、窃取和篡改,保障了网站数据的安全。
SSL/TLS 证书可以通过 DNSPod、阿里云等服务商申请,也可以通过 acme.sh 证书管理脚本申请免费的证书,具体操作方法如下。
一、安装证书管理脚本 acme.sh
1.安装证书管理脚本依赖的软件
apt update && apt install -y socat jq
2.安装 acme.sh 证书管理脚本
curl https://get.acme.sh | sh -s email=example@mail.com
安装过程进行了以下几步:
(1) 把 acme.sh 安装到你的 home 目录下:~/.acme.sh/
(2) 创建了一个 shell 的 alias,例如 .bashrc,方便使用:alias acme.sh=~/.acme.sh/acme.sh
(3) 创建 cronjob 计划任务,每天 0:00 点自动检测所有的证书,并自动续签快过期的证书。
3.刷新环境变量
source ~/.bashrc
4.开启 acme.sh 自动更新
acme.sh --upgrade --auto-upgrade
5.设置 acme.sh 的默认 CA 机构(letsencrypt / zerossl)
acme.sh --set-default-ca --server letsencrypt
6.新建目录用于证书签发时存放验证文件
mkdir -p /www/acme
二、申请证书前的准备
1.编辑站点的 nginx 配置文件
nano /etc/nginx/sites-available/www.example.com
在配置文件中的 server {} 内添加以下代码
# 申请SSL证书验证文件目录设置
location ^~ /.well-known/acme-challenge/ {
# 默认MIME类型
default_type "text/plain";
# 验证文件目录
root /www/acme;
}
示例配置:
server {
listen 80;
listen [::]:80;
# 绑定域名(修改成自己的域名)
server_name www.example.com example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 申请SSL证书验证文件目录设置
location ^~ /.well-known/acme-challenge/ {
# 默认MIME类型
default_type "text/plain";
# 验证文件目录
root /www/acme;
}
}
2.测试 nginx 配置文件
nginx -t
3.重新加载 nginx 配置
systemctl reload nginx
三、申请签发并安装 SSL/TLS 证书(ECC)
1.申请签发域名证书(ECC证书)
# 单域名命令
acme.sh --issue -d www.example.com --keylength ec-256 --webroot /www/acme
# 多域名命令
acme.sh --issue -d www.example.com -d example.com --keylength ec-256 --webroot /www/acme
2.创建用于存放站点证书的目录
mkdir -p /www/cert/www.example.com/
3.编辑站点的 nginx 配置文件
nano /etc/nginx/sites-available/www.example.com
添加证书的配置代码:
# SSL 证书路径
ssl_certificate /www/cert/www.example.com/fullchain.pem;
# SSL 证书密钥路径
ssl_certificate_key /www/cert/www.example.com/privkey.pem;
示例配置:
server {
listen 80;
listen [::]:80;
# 绑定域名(修改成自己的域名)
server_name www.example.com example.com;
# SSL 证书路径
ssl_certificate /www/cert/www.example.com/fullchain.pem;
# SSL 证书密钥路径
ssl_certificate_key /www/cert/www.example.com/privkey.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 申请SSL证书验证文件目录设置
location ^~ /.well-known/acme-challenge/ {
# 默认MIME类型
default_type "text/plain";
# 验证文件目录
root /www/acme;
}
}
4.安装证书到指定的目录
整块复制粘贴,记得要修改域名,如果是多域名证书,只需要输入申请证书时命令中的第一个域名即可。
acme.sh --install-cert -d www.example.com --ecc \
--key-file /www/cert/www.example.com/privkey.pem \
--fullchain-file /www/cert/www.example.com/fullchain.pem \
--ca-file /www/cert/www.example.com/ca.pem \
--reloadcmd "systemctl force-reload nginx"