Nginx服务
对非同源地址的nginx配置要求
http同端口访问http跳转https(497错误)
关于Nginx 的 location 匹配规则总结
Nginx+LUA+Redis实现token访问鉴权
Nginx实现后端Server域名动态解析
Nginx反向代理跨域问题
浏览器报错ERR_CONTENT_LENGTH_MISMATCH
Nginx常见HTTP Code错误排查
使用acme.sh部署证书至Nginx
Nginx在普通用户下使用特权端口 (443端口)
Nginx配置自定义状态页
try_files和alias的组合使用
Nginx中301重定向导致端口丢失
本文档使用 MrDoc 发布
-
+
home page
使用acme.sh部署证书至Nginx
## 程序说明 - 纯Shell语言编写的ACME协议客户端. - 一个脚本即可自动颁发,续订和安装证书. - 支持在Docker内使用,且支持IPv6. - Nginx、Apache等支持自动续期 ## 安装程序 ```bash curl https://get.acme.sh | sh -s email=<你的邮箱> ``` ![](/media/202402/2024-02-01_160231_2197550.5675013186441874.png) *PS*: 1. 这里不使用`--standalone`模式生成证书, 直接忽略警告即可. 2. `-s email=<你的邮箱>` 不用加也可以运行, 但推荐加会更好. ## 测试命令 重新进入下终端(输入bash或zsh)刷新下环境变量, 然后输入acme.sh命令测试, 正常输出即可. *PS*: 如提示无相应命令则进入 ~/.acme.sh 目录下, 使用路径执行./acme.sh ![](/media/202402/2024-02-01_160357_2852520.47896674738033995.png) ------ > 下文使用 www.example.com 域名进行演示, 配置时注意替换成自己的域名!!! ## 修改CA 可根据实际需要修改CA,目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令: ```bash # 切换 ZeroSSL acme.sh --set-default-ca --server zerossl # 默认的CA # 切换 Let's Encrypt acme.sh --set-default-ca --server letsencrypt # 切换 Buypass acme.sh --set-default-ca --server buypass # 切换 SSL.com acme.sh --set-default-ca --server ssl.com # 切换 Google Public CA acme.sh --set-default-ca --server google ``` CA 的简单对比 | 功能 | LE | Buypass | ZeroSSL | SSL.com | Google Public CA | |------------|------|-----------|---------|---------|------------------| | 有效期 | 90 天 | 180 天 | 90 天 | 90 天 | 90 天 | | 多域名 | 支持 | 支持,最多 5 个 | 支持 | 收费支持 | 支持 | | 泛域名 | 支持 | 不支持 | 支持 | 收费支持 | 支持 | | Rate Limit | 有 | 有 | 收费无 | 未知 | 有 | | GUI 管理 | 否 | 否 | 有 | 有 | 无 | | ECC 证书链 | 否 | 否 | 有 | 未知 | 无 | | 客户支持 | 社区 | 收费 | 收费 | 收费 | 收费 | 简单来说,如果没有特殊需求,可以选择 Let's Encrypt,如果服务器在国内,可以选择 ZeroSSL 或 Buypass,如果愿意付费得到更好的服务和保障,可以选择 ZeroSSL 和 SSL.com,如果面向欧盟用户,可以选择 Buypass 和 ZeroSSL。 注意:经过测试 Google Public CA 的 ACME 验证域名在国内是无法访问的,只有国外服务器才可以申请,申请完成后的证书并无影响。 ## 前置步骤 1. 域名 www.example.com 已正常解析主机 2. Nginx已正常运行,并防火墙已放行443端口 3. 创建目录用于存放验证文件,示例目录为`/etc/nginx/html/.well-known/acme-challenge` 4. 创建目录用于存放证书文件:示例目录为`/etc/nginx/conf/cert` ## 1. 配置Nginx 配置Nginx添加location指向预设目录 ```Nginx location /.well-known/acme-challenge { root html/.well-known/acme-challenge; } ``` 修改Nginx证书配置 ```Nginx ssl_certificate cert/acme_www.example.com.crt; ssl_certificate_key cert/acme_www.example.com.key; ``` ## 2. 生成证书 ```bash # 签发默认证书 acme.sh --issue -d www.example.com -w /etc/nginx/html/.well-known/acme-challenge # 签发ECC证书 acme.sh --issue -d www.example.com -w /etc/nginx/html/.well-known/acme-challenge # 签发多域名证书 acme.sh --issue -d www.example.com -d www.example.cn -w /etc/nginx/html/.well-known/acme-challenge ``` 证书生成过程示例: ![](/media/202402/2024-02-01_162349_7195500.39714332068063063.png) ## 3. 安装证书 执行命令安装证书到指定的Nginx证书目录,安装成功并重启Nginx使其生效 ```bash acme.sh --install-cert -d www.example.com \ --key-file /etc/nginx/conf/cert/acme_www.example.com.key \ --fullchain-file /etc/nginx/conf/cert/acme_www.example.com.crt \ --ca-file /etc/nginx/conf/cert/acme_www.example.com.ca.crt \ --reloadcmd "/etc/nginx/sbin/nginx -s reload" ``` 证书安装成功示例: ![](/media/202402/2024-02-01_162521_9166770.08996983552836202.png) ## 4. 续期确认 证书申请成功后acme.sh会自动创建了一条续期任务, 每次执行会续期配置中的证书, 默认是每30天续期一次, 每一次是续期3个月 ```bash [root@localhost]# crontab -l 42 6 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null ```
Nathan
Feb. 1, 2024, 4:48 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password