参考链接:https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode
https://yq.aliyun.com/articles/674835
要解决的问题: 使用自签名SSL证书会造成在用浏览器访问时会提示“你的连接不是私密连接”,因此要另外选择一种免费申请SSL证书的方法
方案:利用acme.sh脚本的DNS手动模式来免费添加SSL证书(下载脚本、生成TXT记录并添加到域名控制面板、生成证书、安装证书到Nginx的SSL目录下、Nginx添加SSL路径)
前提:不需要公网IP,但需要购买一个域名,购买域名的话有多家域名解析商可以供选择(DNSPod、Cloudflare、Godaddy等),购买好域名后就可以把内网IP绑定上了
先添加域名解析,本篇以DNSPod来提供域名解析:
在“域名注册”中购买好域名后,在“域名解析”中添加新购买的域名,添加后点击进入该域名中
在“记录管理”中,添加A记录,设置“主机记录”(即域名前缀)为www,“记录值”设置为内网web服务器的IP,TXT记录要等到后面执行完acme脚本生成TXT记录的主机记录和TXT记录值后,再添加该记录。添加完A记录后要等一会时间才会生效,只有生效后再执行acme.sh脚本才会生成TXT记录
curl https://get.acme.sh | sh
安装acme.sh后自动在~/.bashrc下添加别名,而且会自动添加定时任务用于更新证书。
#~/.acme.sh目录下的初始默认的文件一共有7个,执行acme脚本后会在该目录下新增目录,如果安装证书的过程出现问题,则删除掉新增的目录,然后再出现安装证书
-rw-r--r-- 1 root root 96 7月 9 17:34 account.conf
-rwxr-xr-x 1 root root 189233 7月 9 17:34 acme.sh
-rw-r--r-- 1 root root 78 7月 9 17:34 acme.sh.csh
-rw-r--r-- 1 root root 78 7月 9 17:34 acme.sh.env
drwxr-xr-x 2 root root 4096 7月 9 17:34 deploy
drwxr-xr-x 2 root root 4096 7月 9 17:34 dnsapi
drwxr-xr-x 2 root root 122 7月 9 17:34 notify
acme.sh --issue -d www.kakuxin.cn --dns \ #注意:要先购买好域名,然后在域名控制面板上添加A记录并等待一会时间后(添加A记录后并不会马上生效),再执行acme.sh才能成功生成TXT记录
--yes-I-know-dns-manual-mode-enough-go-ahead-please
[2019年 07月 11日 星期四 15:49:52 CST] Create account key ok.
[2019年 07月 11日 星期四 15:49:52 CST] Registering account
[2019年 07月 11日 星期四 15:50:42 CST] Registered
[2019年 07月 11日 星期四 15:50:42 CST] ACCOUNT_THUMBPRINT='U7kyz1IBaa9mQ4hl6FI34ZEi9fEgRyUjpKAB5WTe1MI'
[2019年 07月 11日 星期四 15:50:42 CST] Creating domain key
[2019年 07月 11日 星期四 15:50:42 CST] The domain key is here: /root/.acme.sh/www.kakuxin.cn/www.kakuxin.cn.key
[2019年 07月 11日 星期四 15:50:42 CST] Multi domain='DNS:www.kakuxin.cn'
[2019年 07月 11日 星期四 15:50:42 CST] Getting domain auth token for each domain
[2019年 07月 11日 星期四 15:50:46 CST] Getting webroot for domain='www.kakuxin.cn'
[2019年 07月 11日 星期四 15:50:46 CST] Add the following TXT record:
[2019年 07月 11日 星期四 15:50:46 CST] Domain: '_acme-challenge.www.kakuxin.cn'
[2019年 07月 11日 星期四 15:50:46 CST] TXT value: '4nuX6qyoE3_yV4*********'
[2019年 07月 11日 星期四 15:50:46 CST] Please be aware that you prepend _acme-challenge. before your domain
[2019年 07月 11日 星期四 15:50:46 CST] so the resulting subdomain will be: _acme-challenge.www.kakuxin.cn
[2019年 07月 11日 星期四 15:50:46 CST] Please add the TXT records to the domains, and re-run with --renew.
[2019年 07月 11日 星期四 15:50:46 CST] Please add '--debug' or '--log' to check more details.
[2019年 07月 11日 星期四 15:50:46 CST] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
成功生成记录值后,到域名控制面板中对应的域名中,创建TXT记录并添加主机记录和TXT记录值这两项
主机记录:_acme-challenge.www
记录值:4nuX6qyoE3_yV4********
acme.sh --renew -d www.kakuxin.cn \ #使脚本根据TXT记录生成证书并存放到了~/.acme.sh目录下
--yes-I-know-dns-manual-mode-enough-go-ahead-please
dig -t txt _acme-challenge.kakuxin.cn @8.8.8.8 #若生效,则返回的应答会显示为1 “ANSWER: 1”
#若系统没有安装dig命令,则执行以下步骤:
第1步:
yum provides *bin/dig
第2步:
yum -y install bind-utils-9.9.4-74.el7_6.1.x86_64 #安装最下边的update源
acme.sh --installcert -d kakuxin.cn \ #安装SSL证书到Nginx的SSL证书目录下,并强制重启Nginx,不然无法加载证书
--key-file /etc/nginx/cert/www.kakuxin.cn.key \
--fullchain-file /etc/nginx/cert/fullchain.cer \
--reloadcmd "service nginx force-reload"
vim /etc/nginx/conf.d/nextcloud.conf #到Nginx的配置文件中修改SSL证书的路径
server {
listen 443 ssl;
server_name www.kakuxin.cn;
ssl_certificate /etc/nginx/cert/fullchain.cer;
ssl_certificate_key /etc/nginx/cert/www.kakuxin.cn.key;
nginx -t #检查Nginx的语法
systemctl restart nginx #重启Nginx