• 使用caddy实现非标准端口https


    近来使用Halo搭建博客,并顺便把WeHalo小程序也把玩了起来,但是发现几个非常棘手的问题:

    1. 根据访问日志发现有三方在刷取关键接口的请求,http请求在部分情况下会暴露出很显著的安全问题;
    2. 小程序强制依赖https,非https连接不能使用,尝试三方开源的v-request替换也是效果不太好;
    3. 第三个问题是由以上问题衍生的,如果升级https网站域名首先就是需要备案,对于个人博客来说,稳定性要求没有那么高,备案流程复杂,想想还是算了吧;

    那能怎么办呢?条件不够,技术来凑。

    众所周知,http和https请求的默认端口分别为80和443,那么能否实现非标准端口的https呢,这样就能绕过未备案的限制。

    经过对https资料的查找,发现有很大希望实现,有这么关键的几点。

    https基本原理就不在熬述了,直接引用资料原文:

    通过 ACME 协议向 Let's Encrypt 证明自己的域名所有权的过程就叫做 Challenge (验证),目前有三种 Challenge 的方式:

    • HTTP-01
    • NS-01
    • TLS-SNI-01 (已禁用)
    • TLS-ALPN-01

    HTTP-01是目前最常见的验证方式,但是该验证方式需要通过80端口开放一个路径给Let's Encrypt访问它提供的 token来验证你的域名所有权,因此在80端口被封锁的情况下这个验证方式是不现实的;

    类似的,TLS-ALPN-01需要通过443端口访问来验证,也是行不通;

    这样对于国内家庭带宽用户来说就只剩下了一种方式:DNS-01。

    了解这些后,解决方案就一目了然了,就是用DNS-01方式进行https验证。

    有了这些信息,想法可行,接下来就是寻找合适的工具来实现了。

    caddy给我们进行了很好的集成,基于golang的caddy就是一个编译过后的二进制文件,轻巧、实用。

    caddy原生https的实现是基于Let's Encrypt的,想要使用DNS-01的https实现需要附带插件,这里我们阿里云的dns服务商,需要选择 github.com/caddy-dns/lego-deprecated;

    下载完成后的caddy文件就是包含附件的可执行文件了;

    接下来我们编写Caddyfile配置文件,有两个配置要点:

    1. 指定http和https监听端口;
    2. 配置请求指向;
    {
      http_port 1234
      https_port 2234
    }
    xxx {
      reverse_proxy localhost:8081
      tls {
        dns lego_deprecated alidns
      }
    }
    

    配置完成还不行,我们需要按照lego_deprecated的文档,建立文件,配置以下:

    ALICLOUD_ACCESS_KEY=xxx
    ALICLOUD_SECRET_KEY=xxx
    

    关键参数(此部分参数需要从阿里云后台进行获取),便于联系对应dns进行相关的操作;

    最后使用caddy指令带上配置好的文件直接启动

    caddy run --config Caddyfile --envfile alidns.env
    

    大功告成!

    做一个仰望星空的极客
  • 相关阅读:
    Linux Hung Task分析
    Linux内存都去哪了:(1)分析memblock在启动过程中对内存的影响
    《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll
    Linux内核和用户空间通信之netlink
    Linux soft lockup分析
    一款DMA性能优化记录:异步传输和指定实时信号做async IO
    Linux下时钟框架实践---一款芯片的时钟树配置
    使用Kernel NetEm和tc模拟复杂网络环境
    使用Flame Graph进行系统性能分析
    sigsuspend()阻塞:异步信号SIGIO为什么会被截胡?
  • 原文地址:https://www.cnblogs.com/aqiu18/p/14102829.html
Copyright © 2020-2023  润新知