1、安装 acme.sh
# 切换到 root 用户下,如果已经在了则忽略
sudo su
# 安装
curl https://get.acme.sh | sh -s email=my@example.com
# 配置环境变量
echo 'alias acme.sh=~/.acme.sh/acme.sh' | tee -a ~/.bashrc
source ~/.bashrc
acme.sh 默认安装在 ~/.acme.sh/ 目录。安装的时候建议切换到 root 账号下安装,不是说普通用户不行,而是申请证书的时候,acme.sh 会修改 Web 服务器的配置(申请完成后会自动还原),如果普通用户没有配置修改权限,就可能导致申请失败。切换到 root 可以避免很多问题。
2、生成证书
acme.sh --issue -d jizhong.plus --nginx
以 nginx 为例,生成证书前要确保两件事情。
1、确保 nginx 是启动的,服务器开放了 80 端口
2、确保申请证书域名的 http 指向是可以访问的。以笔者申请的域名为例,要确保 http://jizhong.plus 是可以访问的
执行命令后 acme.sh 会自动修改域名对应的配置,在网站根目录下生成一个校验文件,这样就可以不用对域名做 TXT 解析验证了。这种方式的优势就是:开发者有 Web 服务器权限,但是没有域名管理权限(可能在其他人手里,操作起来很麻烦),使用这种方式可以方便的申请 SSL 证书。
3、安装证书
创建证书存储目录,以 Nginx 为例,放到 /etc/nginx/cert 目录
mkdir -p /etc/nginx/cert/jizhong.plus
安装
acme.sh --install-cert -d jizhong.plus \
--key-file /etc/nginx/cert/jizhong.plus/key.pem \
--fullchain-file /etc/nginx/cert/jizhong.plus/cert.pem \
--reloadcmd "service nginx force-reload"
4、配置 https
在证书安装完成后,还需要修改 nginx 配置文件,监听 443 端口,并将 80 端口跳转到 443。
# /etc/nginx/conf.d/jizhong.plus.conf
server {
listen 80;
server_name jizhong.plus;
return 301 https://$host$request_uri;
# location / {
# root /opt/wwwroot/jizhong.plus;
# index index.html index.htm;
# }
}
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name jizhong.plus;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/cert/jizhong.plus/cert.pem;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/cert/jizhong.plus/key.pem;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /opt/wwwroot/jizhong.plus;
index index.html index.htm;
}
}
重启 nginx 就可以使用 https://jizhong.plus 访问了,同时 http 会自动跳转到 https。