Pandorabox路由器申请Let's Encrypt证书,为内网web服务提供SSL支持

对于家中宽带有公网IP的用户,有时我们需要将路由器内部网络的某些web服务通过端口转发暴露到外网(例如NAS远程访问),但HTTP是明文传输,有被监听的风险;如果在NAS上使用自签名证书,再端口转发,会被Chrome浏览器认为是风险连接拒绝访问(笔者使用80.0.3987版本,命令行参数启动、系统添加证书信任法均不能通过);使用某些NAS自带的Let‘s Encrypt插件申请到的证书,也只能为NAS单独一个服务添加HTTPS。本文将介绍如何在路由器上安装NGINX并部署SSL,反向代理内网中的多个HTTP服务。

要求

一个域名,无须备案;路由器有公网IP,路由器为Pandorabox固件(理论上基于openwrt的固件都可以);软件源已更至最新。

截至2020.03,可用的Pandorabox软件源地址为http://downloads.pangubox.com:6380/pandorabox

比如我的路由器为newifiD1,配置信息则为

src/gz 18.10_base http://downloads.pangubox.com:6380/pandorabox/18.10/packages/mipsel_1004kc_dsp/base
src/gz 18.10_lafite http://downloads.pangubox.com:6380/pandorabox/18.10/packages/mipsel_1004kc_dsp/lafite
src/gz 18.10_luci http://downloads.pangubox.com:6380/pandorabox/18.10/packages/mipsel_1004kc_dsp/luci
src/gz 18.10_mtkdrv http://downloads.pangubox.com:6380/pandorabox/18.10/packages/mipsel_1004kc_dsp/mtkdrv
src/gz 18.10_newifi http://downloads.pangubox.com:6380/pandorabox/18.10/packages/mipsel_1004kc_dsp/newifi
src/gz 18.10_packages http://downloads.pangubox.com:6380/pandorabox/18.10/packages/mipsel_1004kc_dsp/packages

安装NGINX和acme

nginx在pandorabox的web管理界面或命令行opkg install nginx 安装均可,acme按照官方说明安装、运行,但之前还需再安装几个包:curl wget ca-certificates openssl-util ca-bundle socat

ca-bundle是一堆打包的CA根证书,pandorabox默认不包含任何CA根证书,所以无法建立任何SSL连接。socat在acme的部分功能里会用到,最好安装。

安装过程还有几个地方需要注意:

1. 安装nginx后会报启动失败,端口被占用,这是正常的,因为80端口已经被路由器Web管理界面(uhttpd服务)占用了,之后我们会改nginx配置文件。

2. 使用http验证,注意uhttp的默认网站根目录是/www,并需在防火墙中打开80端口,如果运营商屏蔽了80端口,那http根目录验证无法使用,但可以用standalone模式指定其他端口验证。比如使用88端口,先在防火墙中打开88端口,然后验证命令为:

acme.sh --issue -d example.com --standalone --httpport 88

如果使用nginx自动验证,要确保nginx已经正确运行,这需要配置uhttpd端口与nginx不冲突,以及防火墙,不建议使用。

3. 使用dns验证,无需在路由器上做任何配置,建议使用acme的自动txt记录添加功能

4. 拷贝证书可以用acme的拷贝命令,但需做修改如下

acme.sh --installcert -d example.com --key-file       /etc/nginx/key.pem  --fullchain-file /etc/nginx/cert.pem
# --reloadcmd     "service nginx force-reload" 不要添加这句

配置Nginx

至此证书已经获取完毕,接下来在nginx中配置。假设我们内网的两个web服务地址分别为http://192.168.0.100, http://192.168.0.102/test

user nobody nogroup;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    #default_type  application/octet-stream;

    #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
    #                  ‘$status $body_bytes_sent "$http_referer" ‘
    #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    client_body_timeout 3600;
    client_header_timeout 1800;
    keepalive_timeout 15;
    send_timeout 3600; 

    gzip  on;

    server {
        listen       443 ssl;  #不方便使用443端口可更换其他端口
        server_name  example.com;

        charset utf-8;
        ssl_certificate    cert.pem; #注意这里两个文件不要写反了
        ssl_certificate_key  key.pem;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout 5m;
        ssl_prefer_server_ciphers on;
        #access_log  logs/host.access.log  main;

        #error_page  404              /404.html;
        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarder-For $remote_addr;

        location /servertest {
            proxy_pass http://192.168.0.102/test;
            proxy_redirect default;  #nginx服务器不做缓存,所有请求都转发到目标服务器进行处理
            proxy_buffering off;
        }
        location /server1 {
            proxy_pass http://192.168.0.100;
            # 不做配置,nginx会对内容进行缓存,速度有些许提升,但可能遭遇超时问题
        }   

        location ~ //.ht {
            deny all;
        }

        #error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   html;
        #}

    }
}

Nginx配置文件

重启nginx服务:/etc/init.d/nginx restart

如果没有错误信息输出,防火墙的相应端口已经打开,则访问https://example.com/server1和https://example.com/servertest(如果指定非443端口需加上端口号),发现服务已经运行在ssl之上了。更多服务只需设置更多子目录转发即可。

注意

1. 理论上到nginx配置之前都可以在内网主机上进行,最终只要手动拷贝生成的两个证书文件到路由器/etc/nginx目录即可,但在证书验证环节就需要端口转发,或者用dns验证。

2. 即使路由器不支持安装nginx,也可以在内网主机上安装nginx,然后把此主机设为DMZ或者用端口映射的方式暴露出来,效果是一样的,具体步骤不再赘述。

3. SSL对路由器性能开销不小,笔者的newifiD1在测试大文件下载时速度要比HTTP降低一半左右,且路由器负载跑满,有条件应使用高配路由器。

Pandorabox路由器申请Let's Encrypt证书,为内网web服务提供SSL支持

原文地址:https://www.cnblogs.com/qjfoidnh/p/12389443.html

时间: 2024-10-07 19:53:57

Pandorabox路由器申请Let's Encrypt证书,为内网web服务提供SSL支持的相关文章

利用路由器端口转发实现远程桌面访问内网某台机器

本机内网ip为192.168.200.119,另外我们的外网有静态ip(假设为1.2.3.4),如果没有可以考虑用一些动态域名解析工具. 1.找一个不用的端口,如:15312,在路由器(我的是tp-link)控制界面里设置转发端口,如图: 2.本机的注册表中修改远程桌面端口,如下: 2.1 修改 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]双击右边的PortNumbe

CA和证书(企业内网搭建CA服务器生成自签名证书,CA签署,实现企业内网基于key验证访问服务器)

一些CA基础 PKI:Public Key Infrastructure签证机构:CA(Certificate Authority)注册机构:RA证书吊销列表:CRL X.509:定义了证书的结构以及认证协议标准版本号 主体公钥序列号 CRL分发点签名算法 扩展信息颁发者 发行者签名有效期限主体名称 证书类型:证书授权机构的证书服务器用户证书获取证书两种方法:1)使用证书授权机构生成证书请求(csr)2)将证书请求csr发送给CACA签名颁发证书自签名的证书自已签发自己的公钥 证书作用 获取证书

申请Let’s Encrypt通配符HTTPS证书(certbot ACME v2版)

1.获取certbot-auto# 下载 # 下载 wget https://dl.eff.org/certbot-auto # 设为可执行权限 chmod a+x certbot-auto 2.开始申请证书客户在申请 Let’s Encrypt 证书的时候,需要校验域名的所有权,证明操作者有权利为该域名申请证书,目前支持三种验证方式: dns-01:给域名添加一个 DNS TXT 记录.http-01:在域名对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件.t

Cisco 路由器上配置Easy虚拟专用网(解决员工出差访问公司内网)

博文目录一.Easy 虚拟化专用网需要解决的问题是什么?二.如何在路由器上实现Easy 虚拟专用网?三.配置路由器上实现Easy 虚拟专用网 由于"Virtual Private Network"(请看首字母,就知道是什么咯)是敏\感词汇,所以在博文中使用它的中文名字"虚拟专用网"来代替. 在之前写过了Cisco路由器IPSec 虚拟专用网原理与详细配置:Cisco的ASA防火墙和路由器上实现IPSec虚拟专用网.这两篇博文都是用于实现总公司和分公司之间建立虚拟专用

windows server2008R2申请免费let's encrypt证书

Let's Encrypt 项目(https://letsencrypt.org/)是由互联网安全研究小组ISRG,Internet Security Research Group主导并开发的一个新型数字证书认证机构CA,Certificate Authority.该项目旨在开发一个自由且开放的自动化 CA 套件,并向公众提供相关的证书免费签发服务以降低安全通讯的财务.技术和教育成本.在过去的一年中,互联网安全研究小组拟定了 ACME 协议草案,并首次实现了使用该协议的应用套件:服务端 Boul

【http转https】其之二:申请Let's Encrypt颁发SSL证书

[http转https]其之二:申请Let's Encrypt颁发SSL证书 文:铁乐猫2017年1月12日 申请Let's Encrypt颁发SSL证书 由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务, ISRG 来自于美国加利福尼亚州的一个公益组织.Let's Encrypt 得到了 Mozilla.Cisco.Akamai.Electronic Frontier Foundation 和 Chrome 等众多公司和机构的支持,发

申请Let's Encrypt免费SSL证书

沃通及期收购的startssl被封,用不了,只能申请Let's Encrypt免费证书,我就不科普了,免费是免费,时效只有3个月,就得更新,就是这样,喵 到下面的网站,一下脚本,可以助力你快速申请证书 https://certbot.eff.org/ 下面以centos 6 - nginx 为例: 打开https://certbot.eff.org/ 选好系统版本,即下面的URL https://certbot.eff.org/#centos6-nginx 1.下载 wget -O /sbin/

centos+nginx申请Let's Encrypt 通配符HTTPS证书

Let's Encrypt 宣布 ACME v2 正式支持通配符证书,并将继续清除 Web 上采用 HTTPS 的障碍,让每个网站轻松获取管理证书.消息一出,马上就有热心用户分享出了 Let's Encrypt 通配符 HTTPS 证书的申请方式,下面我们一起来学习下吧! 配置环境: 操作系统:Ubuntu 16.04.2 LTS 配置域名:tinywan.top 具体步骤 1.获取certbot-auto 1 2 3 4 5 # 下载 wget https://dl.eff.org/certb

Let's Encrypt证书安装

申请让我们加密泛域名证书及Nginx / Apache证书配置 让我们加密基础知识 让我们加密是一个认证机构(证书颁发机构= CA) 想使用HTTPS需要认证机构颁发的电子证书 让我们加密和其他认证机构的区别(或者说是卖点): 免费,Let's Encrypt提供期限是90天的免费电子证书 提供工具certbot自动生成电子证书文件 让我们加密为了自动生成电子证书搞了一个ACME协议 自动证书管理环境= ACME,自动认证管理环境协议 协议草案已经提交IETF ACME协议的基本思路是: 在你服