使用 `acme.sh` 申请 `Let‘s Encrypt` 证书部署服务器

准备条件

  • 一台可以连接的服务器,本文服务器系统使用 linux 命令,以阿里云的 ECS 为例
  • 可以使用其它的,必须是可执行 linux 命令的服务器,例如 CentOSUbuntu

安装 acme.sh

  • 不会 acme.sh 没关系,甚至你不需要知道他是用来干嘛的,下面使用的都是很简单的命令
  • 连接服务器,这里以 xshell 为例
  • biaov@qq.com: 替换成你自己的邮箱地址
sh 复制代码
# 安装命令
curl https://get.acme.sh | sh -s email=你的邮箱
# 例如
curl https://get.acme.sh | sh -s email=biaov@qq.com
  • 安装完成之后查看是否安装成功
sh 复制代码
acme.sh -v

申请证书

  • 域名和域名访问的目录最好是能访问的,因为它会做校验,在该目录下生成一条校验记录,校验完成之后会自动删除
  • 如果域名和目录不匹配则会报错,错误日志在 /root/.acme.sh/.acme.sh.log 里面查看即可,如果错误码是3,则表示路径不对
sh 复制代码
acme.sh --issue -d 域名 -w 域名访问的目录
# 例如
acme.sh --issue -d biaov.cn -w /www/

申请成功

  • 申请成功之后,会在 /root/.acme.sh/域名_ecc 目录下生成证书文件
  • 然后使用 nginx 配置即可

使用脚本配置多个域名

  • 为了方便维护,可以使用脚本配置多个域名,脚本如下
  • 一个域名对应一个目录
  • --key-file: 自定义证书生成的目录
  • acme-config.sh
sh 复制代码
#!/bin/bash
~/.acme.sh/acme.sh --issue \
-d biaov.cn -w /www/home/ \
-d demo.biaov.cn -w /www/demo/ \
--key-file /www/certs/key.pem \
--fullchain-file /www/certs/cert.pem \
  • 上传脚本文件
  • 执行脚本
sh 复制代码
# 这个保证你当前目录和脚本文件处在同一目录,不然使用绝对目录执行
./acme-config.sh
# 或者
# /www/acme-config.sh

附带 nginx 配置

  • /www/certs/cert.pem: 路径为前面配置的 --fullchain-file 路径
  • /www/certs/key.pem: 路径为前面配置的 --key-file 路径
  • 因为下面有许多重复的,不方便维护,所以可以使用单个文件 include 引入
sh 复制代码
server {
    listen       443 ssl;
    server_name  biaov.cn;

    ssl_certificate      /www/certs/cert.pem;
    ssl_certificate_key  /www/certs/key.pem;

    index  index.html index.htm;

    root   /www/home;
    location / {
        try_files $uri $uri/ /index.html;
    }
}

server {
    listen       443 ssl;
    server_name  demo.biaov.cn;

    ssl_certificate      /www/certs/cert.pem;
    ssl_certificate_key  /www/certs/key.pem;

    index  index.html index.htm;

    root   /www/demo;
    location / {
        try_files $uri $uri/ /index.html;
    }
}
  • 单个文件引入
  • ssl.conf
sh 复制代码
listen       443 ssl;

ssl_certificate      /www/certs/cert.pem;
ssl_certificate_key  /www/certs/key.pem;

index  index.html index.htm;

location / {
    try_files $uri $uri/ /index.html;
}
  • nginx.conf
sh 复制代码
server {
  include      ssl.conf;
  server_name  biaov.cn;
  root         /www/home;
}
server {
  include     ssl.conf;
  server_name demo.biaov.cn;
  root        /www/demo;
}

总结

  • 一个很简单的配置
相关推荐
荣--11 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森12 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
zzzzzz3104 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
ping某5 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql