使用 acme 脚本给项目添加 https 证书排查错误一例
使用 acme 脚本给项目添加 https 证书排查错误一例
step 1:首先是安装
先放官网文档:
github.com/acmesh-official/acme.sh...
上面是中文概况说明
github.com/acmesh-official/acme.sh...
上面是最重要的签发证书说明。
可能会需要科学上网,总之得到 master.tar.gz 这个文件,从github 的 acme 项目获得,解包是个文件夹,叫做 acme.sh-master。
另外,有两种方法 http 和 dns ,本文采用 http 方式
建议使用 root 用户。
进入这个文件夹,安装,命令是
cd acme.sh-master
./acme.sh --install
或者
./acme.sh --install -m my@example.com
要点是,那个邮箱得真的是你自己的邮箱。
step 2:设置环境
如下命令
cd
source .bashrc
其实意思就是让安装的别名立刻生效。
step 3:签发证书,也是最重要的步骤
如果安装时没有指定邮箱,这里必须指定,也是我出错的地方,特此记录一下。
先确保 nginx 是启动状态,项目可访问
假设域名是 xxx.xxx.com
nginx 的 这个项目的单独的虚拟主机配置文件 /etc/nginx/conf.d/xxx.xxx.com.conf,官网说,也可以写总配置。
acme.sh --issue --accountemail "我的邮箱@xxx.com" -d xxx.xxx.com --nginx /etc/nginx/conf.d/xxx.xxx.com.conf
注意屏幕提示,快几秒,慢要好几分钟,看人品。
因为这是发起一个远程请求,请求证书。
看到如下提示说明成功
[Thu Dec 23 01:14:16 CST 2021] Your cert is in: /root/.acme.sh/xxx.xxx.com/amxxx.xxx.com.cer
[Thu Dec 23 01:14:16 CST 2021] Your cert key is in: /root/.acme.sh/xxx.xxx.com/amxxx.xxx.com.key
[Thu Dec 23 01:14:17 CST 2021] The intermediate CA cert is in: /root/.acme.sh/xxx.xxx.com/ca.cer
[Thu Dec 23 01:14:17 CST 2021] And the full chain certs is there: /root/.acme.sh/xxx.xxx.com/fullchain.cer
step 4:复制证书到自己指定目录
mkdir -p /etc/nginx/pem/xxx.xxx.com/
chown -R nginx:nginx /etc/nginx/pem
acme.sh --install-cert -d xxx.xxx.com --key-file /etc/nginx/pem/xxx.xxx.com/key.pem --fullchain-file /etc/nginx/pem/xxx.xxx.com/cert.pem --reloadcmd "systemctl restart nginx"
step 5: 修改 nginx 配置并重启
listen 80;
listen 443 ssl http2;
server_name xxx.xxx.com;
index index.php index.html ;
root /www/wwwroot/xxx/public;
ssl_certificate /etc/nginx/pem/xxx.xxx.com/cert.pem;
ssl_certificate_key /etc/nginx/pem/xxx.xxx.com/key.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
本作品采用《CC 协议》,转载必须注明作者和本文链接
之前给java 域名代理端口配 一直不行 原因没有配静态目录,后来统一指向一个前端项目。他验证时会去那个目录写文件的。