我使用的域名是阿里云,故需要去阿里云RAM管理平台获取:
其他服务商,可以去指定的服务商控制台获取。
阿里云参考文档:如何获取AccessKey ID和AccessKey Secret - 阿里云如何获取AccessKey ID和AccessKey Secret - 阿里云
记住APPID和APPSecret
curl https://get.acme.sh | sh
source ~/.bashrc
如果使用root用户进行安装,会生成文件夹.acme.sh。
文件夹地址:/root/.acme.sh
acme.sh --upgrade --auto-upgrade
申请过程中,请先关闭nginx
##注:此处的APPID 和APPkey为第一步我们从阿里云RAM中获取的
export Ali_Key="Key_XXX"
export Ali_Secret="Secret_XXX"
acme.sh --issue --dns dns_ali -d abc.com -d *.abc.com
申请成功会在.acme.sh文件夹下面,生成abc.com文件夹 ,并且证书会存储在文件夹下
注:
1. 证书申请过程较慢,大概会持续1~2分钟左右,注意不要进行其他操纵。申请成功后会显示“success”.
2. 如SSH控制台操作卡顿,是正常现象,一会儿就好了,等一会。
3. 证书申请过程如果出现问题,记得查看文中“常见问题”,进行修正。
##创建证书导出路径
mkdir /data/cert/abc.com/
##证书导出脚本
acme.sh --install-cert -d abc.com --cert-file /data/cert/abc.com/abc.com.crt --key-file /data/cert/abc.com/abc.com.key --fullchain-file /data/cert/abc.com/fullchain.crt
## 重启nginx
service nginx force-reload
# nginx force-reload 报错替代方案
# service nginx stop
# service nginx start
注:
1. 记得修改脚本中的路径和证书名称。
2. 如果“service nginx force-reload”报错,可以查看“常见问题3”进行解决
nginx安装步骤我就不做说明了,没有安装过的自己去看吧
nginx安装教程:
linux搭建nginx_svallll的博客-CSDN博客_linux搭建nginx
nginx安装SSL模块:
Nginx 的 SSL 模块安装_浮_雲的博客-CSDN博客_nginx安装ssl模块
nginx安装fair插件,进行多服务器负载均衡:(可选,非必要)
Nginx安装SSL证书_love_yu_er的博客-CSDN博客_nginx安装证书
注:由于https会使用到443端口,服务商安全组记得打开443端口
server {
listen 443 ssl;
server_name www.abc.com;
ssl_certificate /data/cert/abc.com/fullchain.crt;
ssl_certificate_key /data/cert/abc.com/abc.com.key;
ssl_trusted_certificate /data/cert/abc.com/fullchain.crt;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
# root "/home/www/www.abc.com";
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:37521/;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
##80端口默认重定向到443端口
server {
listen 80;
server_name www.abc.com;
# 核心代码
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
注:以abc.com域名为例,acme.sh生成的文件包含abc.com.crt ; abc.com.eky ; fullchain.crt;
这里nginx配置ssl域名不要使用abc.com.crt作为密钥,否则会导致证书不全等异常,需要使用fullchain.crt
(二):设置防火墙放行443端口
以下脚本只针对于Centos7及以上,其他版本请查找其他放行方法:
##打开防火墙,如果已经打开了,就不用管了
systemctl start firewalld
##放行443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
##重启放获取
firewall-cmd --reload
此方法SSL证书默认有效期是90天,好处在于此方法默认是一个月更新一次证书。
但是由于ACME更新较快,所以记得更新ACME。
## acme.sh 更新
## 目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.
## 升级 acme.sh 到最新版 :
##手动升级。如果你不想, 可以开启自动升级:
acme.sh --upgrade
##自动更新:
##acme.sh 就会自动保持更新了.
acme.sh --upgrade --auto-upgrade
##关闭自动更新
acme.sh --upgrade --auto-upgrade 0
单域名更新方法
acme.sh --renew -d www.xxx.com --force
或 通配符更新方法
acme.sh --renew -d xxx.com -d *.xxx.com --force
注意过程可能再次出现DNS错误,这里可以查看常见问题二的解决方法
注意:这里要执行上面的renew来覆盖更新证书,而不是申请,别弄错了
证书更新玩后,需要重启nginx
nginx -s reload
以下是申请过程-常见错误说明:(未出现错误,跳过此段)
“证书申请”过程中,出现如下错误:
acme.sh --register-account -m [email protected]
出现错误是因为没有注册acme账号,需要执行脚本进行账号申请
解决办法:
##注意[email protected] 为你的个人邮箱,记得替换
acme.sh --register-account -m [email protected] --server zerossl
成功。然后再次执行证书申请代码。
“证书申请”过程中出现如下错误:
Adding txt value: W9IRKarSz7S1RKS8goMFDOK1dGDEjP4PLGuxNjXIUY4 for domain: _acme-challenge.abc.com
这是因为你的域名和DNS密钥不在一个服务商
解决办法:
重新执行part1,去你域名指定的服务商去查看,拿到后,再次执行下面代码
##注:此处的APPID 和APPkey为第一步我们从阿里云RAM中获取的
export Ali_Key="Key_XXX"
export Ali_Secret="Secret_XXX"
同时进入/root/.acme.sh目录,修改Ali_Key和ALI_Secret
vi account.conf
修改完记得wq保存。然后再次执行证书申请代码。
解决办法:env: /etc/init.d/redis: Permission denied_极客on之路-CSDN博客
解决办法:添加 Nginx 为系统服务(service nginx start/stop/force-reload)_weixin_34279579的博客-CSDN博客
报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilder.
报错:微信小程序服务端-电脑端可以访问,手机不能访问
检测:
检测SSL证书是否出现错误:中间证书缺少
检测地址:SSL服务器证书安装检查器_OPENSSL工具包_迅通诚信
解决办法:(nginx)
ssl_certificate /data/cert/abc.com/fullchain.crt;
ssl_certificate_key /data/cert/abc.com/abc.com.key;
ssl_trusted_certificate /data/cert/abc.com/fullchain.crt;
注意:这里ssl_certificate 配置由原本的abc.com.crt 变成fullchain.crt了,同时配置ssl_trusted_certificate 信任证书
重启nginx
nginx -s reload