本次案例使用acme 来进行证书的生成和配置
环境如下
nginx acme 阿里云
安装acme
// 安装 sh 脚本
cd /root
curl https://get.acme.sh | sh
// 创建一个alias
alias acme.sh /root/acme.sh/acme.sh
域名验证
域名验证方式
为了验证域名所有权,Let’s Encrypt 支持两种方式来验证:
- 域名的 DNS:配置一个随机的 TXT 记录来验证
- 域名的访问:配置一个随机的 URL 地址来验证
本次使用第一种方式来进行验证
acme.sh 访问阿里云 DNS 是通过阿里云 DNS 公开 API 以及用户的 AK 来进行交互的。
Q:如何获取AK?
A:阿里云的AK是由子帐号来进行添加的
具体创建流程为
登陆阿里云 ->访问控制 ->用户 ->新建用户
授权 ->选中刚刚创建的用户 ->搜索DNS权限(可以全选)
执行完成后可以看到子账户的页面中出现了
AccessKeyId”和“AccessKeySecret” (请保存,该秘匙页面刷新后便不可见)
添加 AK
vim .bashrc
末尾添加
export Ali_Key="AccessKeyId"
export Ali_Secret="AccessKeySecret"
bashrc
DNS验证操作
acme.sh --issue --dns dns_ali -d domain.com -d *.domain.com
保存 key和cert到nginx目录
可以放在 /etc/nginx/ssl目录
mkdir -p /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
openssl rand 48 > /etc/nginx/ssl/common_session_ticket.key
acme.sh --install-cert -d domain.com \ --key-file /etc/nginx/ssl domain.key.pem \ --fullchain-file /etc/nginx/ssl domain.cert.pem
service nginx force-reload
nginx 配置https
xxServer-https.conf
server {
listen 443 ssl http2 fastopen=3 reuseport;
server_name domain; # 你的域名
access_log /var/log/nginx/access.www.log; # Nginx日志配置
error_log /var/log/nginx/error.www.log; # Nginx错误日志配置
ssl on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
ssl_session_tickets on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/ssl/domain.com.cert.pem;
ssl_certificate_key /etc/nginx/ssl/domain.com.key.pem;
charset utf-8; # Nginx编码
error_page 497 http://$host$uri?$args;
set $root "/home/OrlandoHouseAgent";
location = /robots.txt { allow all; access_log off; log_not_found off; }
location = /favicon.ico { allow all; access_log off; log_not_found off; }
}