背景

  • 公有云服务器 http 服务 80端口,想做到安全访问
  • 无须HTTPS + 客户端证书
  • 方便、快捷、安全

SSH 隧道 + 本地代理

使用 SSH 隧道将 HTTP 服务“隐藏”在 SSH 之后:

# 客户端建立隧道(将本地 8080 转发到服务器的 80 端口)
ssh -L 8080:localhost:80 user@your-server -i ~/.ssh/id_ed25519# 然后访问本地端口(需先通过 SSH 认证)
curl http://localhost:8080
  • 适用场景:临时授权访问,不适合公开服务。

  • 在公有云的安全组中可以禁止80端口,也不影响在本地访问 http://localhost:8080

因为 SSH 隧道(端口转发)的流量是通过 SSH 协议(默认 22 端口) 传输的,与目标服务(如 HTTP 的 80 端口)无关。

在这里插入图片描述

其他方式

✅ 方案一:使用客户端证书(TLS Mutual Authentication)

这是最接近 SSH 公钥认证的做法。

✦ 原理(TLS 双向认证):

  • 客户端持有私钥 + 客户端证书
  • 服务端信任某个 CA(或特定证书)
  • 在 TLS 握手阶段,客户端用私钥签名一个随机值,服务端验证客户端证书和签名
  • 验证通过后,允许访问

✦ 实现步骤(以 Nginx 为例):

1. 创建自签 CA:
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
2. 为客户端生成证书:
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
3. 配置 Nginx 启用客户端认证:
server {listen 443 ssl;server_name example.com;ssl_certificate     /path/to/server.crt;ssl_certificate_key /path/to/server.key;ssl_client_certificate /path/to/ca.crt;   # 信任的CAssl_verify_client on;location / {root /var/www/html;}
}
4. 客户端访问时使用浏览器导入证书:
  • Chrome / Firefox 支持在“证书管理”中导入 .crt.key 文件
  • 或用 curl 测试:
curl -v --cert client.crt --key client.key https://example.com/

✅ 方案二:基于 JWT(非对称签名)模拟公钥认证

如果 TLS 客户端证书太重,你可以用 JWT 模拟“公钥签名验证”机制。

✦ 原理:

  • 客户端持有私钥,每次请求前用私钥签名一个 payload,生成 JWT
  • 服务端用已知公钥验证签名,确认身份

✦ 实现逻辑(伪代码):

客户端(Python 示例):
import jwt
from datetime import datetime, timedeltaprivate_key = open("client.key").read()payload = {"sub": "client1","exp": datetime.utcnow() + timedelta(minutes=5)
}token = jwt.encode(payload, private_key, algorithm="RS256")
# 在 header 中发送
headers = {"Authorization": f"Bearer {token}"}
服务端验证(Python Flask 示例):
from flask import request
import jwtpublic_key = open("client.pub").read()token = request.headers.get("Authorization").split()[1]try:payload = jwt.decode(token, public_key, algorithms=["RS256"])print("Client ID:", payload["sub"])
except jwt.ExpiredSignatureError:return "Token expired", 401
except jwt.InvalidTokenError:return "Invalid token", 403

这种方式适合你已有 Web 架构,且不想涉及证书分发的问题。


✅ 方案三:基于公钥的 HTTP 签名(Http Signature)

这是类似于 AWS、GitHub Webhook 的请求签名机制。

✦ 原理:

  • 请求者用私钥签名 HTTP 请求(方法、时间戳、body 等)
  • 服务端使用公钥验证签名是否匹配

✦ 适用场景:

  • REST API 鉴权
  • 高安全需求的 webhook 回调
  • 可接入现有 Web 服务中间件

✦ 示例实现:

参考规范:

  • IETF HTTP Signatures Draft
  • 实现库如 Node 的 http-signature, Python 的 requests-http-signature

🧠 总结对比

方案是否基于公钥浏览器支持安全性部署复杂度
TLS 客户端证书✅ 是★★★★★
JWT + 私钥签名✅ 是❌(仅后端)★★★★
HTTP 请求签名(HttpSig)✅ 是★★★★
HTTP Basic / Cookie / 密码❌ 否★★

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88425.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88425.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88425.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

状态机在前端开发中的艺术:从理论到框架级实践

文章目录一 状态机:复杂逻辑的终结者1.1 什么是状态机?1.2 为何前端需要状态机?二 状态机核心概念深度解析2.1 有限状态机(FSM)与分层状态机(HSM)2.2 状态机的数学表示三 前端开发中的状态机实战…

把word中表格转成excle文件

把word中表格转成excle文件 from docx import Document from openpyxl import Workbook from pathlib import Path# 打开 Word 文档 document Document(./weather_report.docx) tables document.tables# 输出文件路径 output_file Path(./weather_report.xlsx)# 如果文件已存…

运维打铁: 阿里云 ECS 实例的高效运维与管理

文章目录思维导图正文内容一、实例基础管理1. 实例创建2. 实例配置调整3. 实例停止与启动二、性能监控与优化1. 系统性能指标监控2. 磁盘 I/O 优化3. 网络优化三、安全防护1. 防火墙设置2. 账号安全管理3. 数据备份与恢复四、自动化运维1. 脚本自动化2. 使用云助手五、成本优化…

RV1126平台(Buildroot Linux)+ SunplusIT SPCA2688 USB摄像头 RTSP推流全流程复盘与问题解决记录

# RK RV1126平台(Buildroot Linux) SunplusIT SPCA2688 USB摄像头 RTSP推流全流程复盘与问题解决记录一、平台与需求- **硬件平台**:Rockchip RV1126 - **操作系统**:基于Buildroot定制的Linux系统 - **USB摄像头**:Su…

深入理解Java虚拟机:Java内存区域与内存溢出异常

前言Java虚拟机(JVM)的自动内存管理是其核心特性之一,它极大地简化了开发者的工作,减少了内存泄漏和内存溢出的问题。本文将详细介绍JVM的自动内存管理机制的内存区域与内存溢出异常问题,包括运行时数据区域、对象的创…

位图入门算法191. 位1的个数

题目链接: 191. 位1的个数 - 力扣(LeetCode) 这道题让我们找出一个数字中二进制中1的个数,这个题目我们就用1的&来解决,最后一位有0为0,都是1才是1,我们只需要判断32次即可。 代码如下&am…

[架构之美]虚拟机Ubuntu密码重置

[架构之美]虚拟机Ubuntu密码重置 当您在虚拟机中运行Ubuntu系统时,忘记密码不再意味着数据丢失!本文将详细介绍可靠的密码重置方法,帮助您快速恢复系统访问权限。 一、虚拟机密码重置原理与准备 1.1 为什么虚拟机重置密码更容易 在虚拟机环…

kotlin中withContext,async,launch几种异步的区别

在 Kotlin 协程中,withContext、async 和 launch 是常用的异步/并发操作函数,它们的主要区别在于用途和返回值:1. launch 作用:启动一个新的协程,用于执行不返回结果的并发任务。使用场景:适合执行没有返回…

git 报错fatal: refusing to merge unrelated histories

解决方案在你操作命令后面加--allow-unrelated-histories 例如: git merge master --allow-unrelated-historiesgit pull或者git push报fatal: refusing to merge unrelated histories 同理: git pull origin master --allow-unrelated-histories

Android 13----在framworks层映射一个物理按键

基于Android 13.一、映射步骤确定要映射的物理按键值在kl文件中增加键值对在InputEventLabels.cpp增加AKEYCODE在keycodes.h中定义AKEYCODE值attrs.xml中增加KEYCODEKeyEvent.java中增加KEYCODE在PhoneManagerWindow等相关类中进行拦截处理相关KEYCODE,属于具体的业…

【Java EE】Mybatis-Plus

1. 开始先进行和以前一样的项目配置、数据库连接配置&#xff0c;在这些基础上&#xff0c;额外引入 Mybatis-Plus 依赖即可。<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><vers…

各版本操作系统对.NET支持情况(250707更新)

借助虚拟机和测试机&#xff0c;检测各版本操作系统对.NET的支持情况。 安装操作系统后&#xff0c;安装相应运行时并能够运行星尘代理或幸运四叶草为通过条件。 测试平台&#xff1a;VMware Workstation 镜像来源&#xff1a;MSDN I Tell You 参考&#xff1a; .NET Fram…

5-Kafka-replication(副本机制)概念

&#x1f504; Kafka 副本机制&#xff08;Replication&#xff09; 核心概念概念说明Replica (副本)分区的完整拷贝&#xff0c;分布在不同 BrokerReplication Factor副本总数&#xff08;含 Leader&#xff09;&#xff0c;生产环境建议 ≥3Leader Replica处理所有读写请求&a…

langgraph的ReAct应用

一、什么是langgraph的ReActLangGraph 中的 ReAct&#xff08;Reasoning Acting&#xff09;代理是一种结合推理与行动能力的 AI 代理架构&#xff0c;通过动态决策链实现复杂任务处理。以下是其核心要点及实践指南。1、ReAct 代理的核心原理1.1工作流程&#xff1a;ReAct 代理…

一个编辑功能所引发的一场知识探索学习之旅(JavaScript、HTML)

文章目录一个编辑功能所引发的一场知识探索学习之旅&#xff08;JavaScript、HTML&#xff09;1. 一个编辑功能案例2. 知识点探索学习3. 参考资料一个编辑功能所引发的一场知识探索学习之旅&#xff08;JavaScript、HTML&#xff09; 1. 一个编辑功能案例 HTML&#xff1a; &l…

kali制作Windows木马

环境描述&#xff1a;攻击机&#xff1a;Kali-2025实验靶机&#xff1a;Windows11不要攻击他人&#xff0c;这只是网络安全实验还是一样获取IP地址制作好之后开服务&#xff0c;上传下载在靶机右键保留下载记得把防火墙&#xff0c;安全中心关了否则无法下载之后就可以kali控制…

从零实现一个GPT 【React + Express】--- 【1】初始化前后端项目,实现模型接入+SSE

摘要 本系列文章主要是实现一个能够对话以及具有文生图等功能的模型应用。主要UI界面会参考chat-gpt,豆包等系列应用。模型使用的是gpt开源的大模型。 如果你是一个前端开发工程师需要一个自己的开源项目&#xff0c;可以学习这个系列的文章&#xff0c;不需要有很完整的后端…

【PTA数据结构 | C语言版】在顺序表 list 的第 i 个位置上插入元素 x

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个整数存入顺序表&#xff0c;对任一给定整数 x&#xff0c;将其插入顺序表中指定的第 i 个位置。注意&#xff1a;i 代表位序&#xff0c;从 1 开始&#xff0c;不是数…

汽车智能化2.0引爆「万亿蛋糕」,谁在改写游戏规则?

进入2025年&#xff0c;长安、奇瑞、比亚迪等各大主机厂纷纷将智能化推进至全新高度&#xff0c;中国汽车智能化竞争进入了“技术市场生态”综合较量阶段。一方面&#xff0c;各大主机厂全力推进辅助驾驶的规模化普及&#xff0c;掀起了一场关于高阶辅助驾驶的“技术平权”革命…

QT 第八讲 --- 控件篇 Widget(三)界面系列

前言&#xff1a; 在上一讲《QT 第七讲 --- 控件篇 &#xff08;二&#xff09;window系列与qrc机制》中&#xff0c;我们探讨了应用程序窗口&#xff08;QMainWindow, QWidget&#xff09;的基础结构、窗口标志、状态以及Qt强大的资源管理机制&#xff08;.qrc文件&#xff0…