zoukankan      html  css  js  c++  java
  • 使用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
    

    大功告成!

    做一个仰望星空的极客
  • 相关阅读:
    sql2slack alash3al 开源的又个轻量级工具
    pgspider fetchq 扩展docker镜像
    godns 集成coredns 的demo
    godns 简单dnsmasq 的dns 替换方案
    aviary.sh 一个基于bash的分布式配置管理工具
    使用coredns 的template plugin实现一个xip 服务
    nginx 代理 coredns dns 服务
    基于nginx proxy dns server
    几个不错的geodns server
    spring boot rest api 最好添加servlet.context-path
  • 原文地址:https://www.cnblogs.com/aqiu18/p/14102829.html
Copyright © 2011-2022 走看看