AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1060670
Accepted
Ampersand
Ampersand
Asked: 2021-04-17 18:51:04 +0800 CST2021-04-17 18:51:04 +0800 CST 2021-04-17 18:51:04 +0800 CST

Nginx 上的 MTLS 与客户端 Android 应用程序一起使用?

  • 772

有没有办法以便宜的方式获得适用于无根 v10+ Android 客户端的 MTLS/双向 SSL/客户端证书?

我有几个个人 api 端点,我希望只有我和几个家庭成员可以公开访问它们,但会过滤掉所有其他流量,比如坏机器人、漏洞扫描程序或同一网关上的任何爱管闲事的客户端。我一直在使用适用于机器人的 IP 过滤,但仍会暴露给白名单 ip 上的任何设备。

目前,我通过 Nginx 上的子域对端点进行反向代理,然后使用 DDNS IP 白名单和 444 过滤其余的访问。另一个可用于限制 Nginx 访问的选项是通过客户端证书/MTLS。这似乎很合适,我可以让 Nginx 请求客户端证书作为可选,并且 444 除了匹配映射的 ssl_client_fingerprint 之外的所有流量。这将是一个比 IP 更严格的设置。

不过,我创建了自己的私有 EC 根 CA、中间服务器 CA 和客户端证书,所有证书都经过签名并链接在一起,并使用 OpenSSL 打包在 PFX 中。在 MacOS 和 Windows 上,一切都运行良好,并且在浏览器中和通过访问 API 的应用程序中都符合预期。Nginx 从客户端获取正确的证书,并允许匹配指纹哈希,否则会断开连接。

在 Android 10+ 上,通过浏览器访问时一切正常,完美。当我尝试通过 Android 应用程序访问 API 时出现问题,Nginx 没有得到客户端证书响应。

从我收集到的信息来看,这种设置曾经可以工作,也许 Android <=7 是事情发生变化的地方。我的理解是,从 8+ 开始,Android 应用程序在默认情况下根本不再信任用户信任存储/私有 CA 客户端链,只有公共系统存储,除非他们在编译 APK 之前在应用程序管理/网络安全设置中明确允许这样做?我假设更改存在有效且必要的安全原因。

有没有办法让这项工作变得便宜?这就是我认为我的选择:

  1. 购买可以签署客户端证书的公共知名 CA?不确定我是否可以摆脱便宜的 DV 或者它是否必须是更复杂和昂贵的东西?

  2. 在服务器上设置 OpenVPN 服务,并为需要访问的应用程序设置隧道。与客户端证书相比,似乎有点矫枉过正。我使用的是小型 VPS,较少的开销对我来说是更好的选择。

  3. 手动滚动上述 Android 应用程序的开源 APK,以允许用户信任存储。好像有点痛...

  4. 根所有设备以强制进行证书身份验证。对于所有需要的设备,我不是一个选择。

  5. 坚持使用 IP 白名单。不完美,但它确实可以将坏扫描仪排除在外。

有没有人有任何我可能不知道的替代建议、建议或更正我在上面尝试做的事情?

干杯

nginx reverse-proxy certificate-authority openssl client-certificate
  • 1 1 个回答
  • 345 Views

1 个回答

  • Voted
  1. Best Answer
    Ampersand
    2021-04-21T06:13:04+08:002021-04-21T06:13:04+08:00

    我最终使用了 Wireguard,到目前为止,它的资源似乎很轻。

    我使用 DDNS 白名单过滤了 Wireguard 端口,因为我已经有了它,然后我更改了 Nginx 以允许来自 VPN 的对等方,否则他们必须有一个有效的客户端证书,其哈希映射或 444。然后 Android 应用程序可以使用需要它们的特定应用程序的 VPN 隧道,然后所有其他应用程序都可以使用带有证书的正常设置。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve