首先戴头盔
在家里的路由器部署SSL证书对于绝大部分人来说并没有实际意义
甚至会让你的访问略微变慢
但如果你是企业用户或者你对路由器的远程访问安全有较高的要求
或者跟我一样有强迫症见到浏览器的红色感叹号有过敏症现象
那么https你值得拥有~
并且我说的步骤也并非纯原创大部分来自与Github或者一些网上的文章然后自己实施过可行
做法或许会略显拙劣或者土炮
如果你是高手欢迎留言
首先说说前提条件:
1、需要你有个域名
2、你要有个OpenWRT路由器并且有公网IP
3、你要有点儿Linux基础知识
那么我们开始说实际步骤了
1、我们先搞定域名的问题(如果你已经有自己的域名并且指向到你自己的路由器,可以直接跳到第二步)
去买个便宜的cn域名并且完整国内的实名认证
或者去国外买个或者不买直接申请个免费的~
然后把dns服务器改为dnspod~让dnspod来管理你的域名
(并不一定要用dnspod,但我是用这个来实现的~)
建立一个二级域名,用于你家的路由器的访问,当然直接主域名怼上去也没啥不妥
然后申请个API Token
你会得到一个ID和一个Token
复制下来~等会儿会用到~
然后上github找一个可以用的ddns脚本~
我这里给一个我自己实测可以用的~
在创建/etc/ddns/目录
在里面创建文件dnspod.sh
内容是
#!/bin/sh token='ID,Token' domain=${1:-'css.js.cn'} sub_domain=${2:-'c'} new_ip=${3:-$(curl -s http://checkip.dyndns.com | sed -n 's/.*: \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p')} api_call() { local param="login_token=${token}&format=json&domain=${domain}&${2}" curl -s -k -XPOST -o- -A'shdns/0.1([email protected])' -d $param https://dnsapi.cn/${1} } api_error() { local key='"code":"1",' [ "${1#*$key}" = "$1" ] && { echo "error: $2" echo $1 exit 1 } } (echo "$new_ip" | grep -Eq "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$") || { echo "Invalid IP: ${new_ip}" exit 1 } record=$(api_call "Record.List" "sub_domain=${sub_domain}") api_error "$record" "Unable to find the record." old_ip=$(echo "$record" | sed 's/.*"value":"\([0-9.]*\)".*/\1/') [ "$old_ip" = "$new_ip" ] && { echo "Record(${new_ip}) not changed. Skipped." exit 0 } echo "Changing A record(${sub_domain}.${domain}) from ${old_ip} to ${new_ip} ..." record_id=$(echo "$record" | sed 's/.*\[{"id":"\([0-9]*\)".*/\1/') result=$(api_call "Record.Ddns" "record_id=${record_id}&sub_domain=${sub_domain}&record_type=A&value=${new_ip}&record_line=%E9%BB%98%E8%AE%A4") api_error "$result" "Failed to update recode."
然后在/etc/hotplug.h/iface/目录下
建立一个00-ddns脚本
内容是
sh /etc/ddns/dnspod.sh 主域名 二级域名
当然了~给权限肯定是要的了~~
那么你就实现了ddns了
然后开始来SSL了
在root目录下运行
curl https://get.acme.sh | sh
没有curl就自己opkg install
系统会自动下载acme以及自动把自动续签加到你的路由器的定期任务中
所以基本不用管
当然如果你的路由器的定期任务没启动就自己想办法了~Google一下你就知道得太多了~
进入.acme.sh目录
cd /root/.acme.sh
这里有很多种办法签发证书~
但是由于众所周知的原因~一般家里上网80端口是被封住的~
所以我们这里用dnspod的api token来签发证书
对!就是刚才申请那个
echo -e "DP_Id='你的ID'\nDP_Key='你的Token'" >>/root/.acme.sh/account.conf
然后开始签发
./acme.sh --issue --dns dns_dp -d 你的域名
最后在.acme.sh/目录下会出现你的域名命名的目录
然后这里用比较土炮的办法部署
但openwrt默认并没有安装ssl我们这里先安装
opkg update opkg install luci-ssl
部署完了后
编辑/etc/config/uhttpd
在
list listen_http ‘0.0.0.0:80’
list listen_http ‘[::]:80’
下面
添加两行
list listen_https ‘0.0.0.0:443’
list listen_https ‘[::]:443’
当然如果已经有了就可以跳过这步
在/root/.acme.sh/你的域名目录下
把你的域名的.key文件覆盖/etc/uhttpd.key
把你的域名的.cer文件覆盖/etc/uhttpd.crt
最后重启uhttpd
/etc/init.d/uhttpd restart
你就会发现你的域名可以访问终于没有红色感叹号了~
由于强迫症所导致的对红色感叹号有过敏症现象神奇的治愈了~~
PS:
要在内网访问域名的话~还需要在
option rfc1918_filter ‘1’
这一行前面加个#或者强迫症患者可以直接删掉这一行
Recent Comments