借助ssh實現web服務的安全驗證

背景

  • 公有云服務器 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…