温馨提示×

ubuntu swagger怎样实现数据加密传输

小樊
41
2025-12-31 20:47:48
栏目: 网络安全

Ubuntu 上让 Swagger 实现数据加密传输的正确做法

一、核心原则

  • Swagger/OpenAPI 是 API 规范与文档展示层,本身不负责业务数据加密;所谓“加密传输”通常指让浏览器与服务器之间的通道使用 HTTPS/TLS
  • Ubuntu 上,推荐通过 Nginx/Apache 反向代理启用 TLS,或在 Node.js/Spring Boot 内启用 HTTPS,即可对 Swagger UI 与后端 API 的传输链路加密。生产环境还应配合鉴权与访问控制。

二、方案一 Nginx 反向代理启用 HTTPS(通用且推荐)

  • 安装与启用 HTTPS
    • 安装 Nginx 与证书工具(以 Let’s Encrypt/certbot 为例):
      • sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
      • 申请证书(将 your-domain 替换为实际域名):sudo certbot --nginx -d your-domain
  • 配置 HTTP 到 HTTPS 强制跳转与代理
    • 示例配置片段(/etc/nginx/sites-available/your-domain):
      server {
          listen 80;
          server_name your-domain;
          return 301 https://$host$request_uri;
      }
      
      server {
          listen 443 ssl http2;
          server_name your-domain;
      
          ssl_certificate /etc/letsencrypt/live/your-domain/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/your-domain/privkey.pem;
      
          # 推荐的安全套件与协议
          ssl_protocols TLSv1.2 TLSv1.3;
          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
          ssl_prefer_server_ciphers off;
      
          # Swagger UI 与后端 API 的反向代理
          location /api-docs/ {
              proxy_pass http://127.0.0.1:3000;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_http_version 1.1;
          }
      
          location /api/ {
              proxy_pass http://127.0.0.1:3000;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      
    • 检查并重载 Nginx:sudo nginx -t && sudo systemctl reload nginx
  • 访问验证
    • 打开浏览器访问 https://your-domain/api-docs,应看到 Swagger UI 通过 HTTPS 加载,证书有效且链路加密。

三、方案二 在应用内启用 HTTPS(Node.js 示例)

  • 生成自签名或申请证书后,在 Node.js + Express + swagger-ui-express 中启用 HTTPS:
    const fs = require('fs');
    const https = require('https');
    const express = require('express');
    const swaggerUi = require('swagger-ui-express');
    const swaggerDocument = require('./swagger.json');
    
    const app = express();
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
    
    const options = {
      key: fs.readFileSync('/path/to/privkey.pem'),
      cert: fs.readFileSync('/path/to/fullchain.pem')
    };
    
    https.createServer(options, app).listen(3000, () => {
      console.log('HTTPS Server running on https://localhost:3000/api-docs');
    });
    
  • 若与 Nginx 并存,建议仅保留一种方式终止 TLS,避免重复加密与配置冲突。

四、配套安全建议

  • 生产环境可禁用或限制 Swagger UI 访问
    • 通过配置关闭文档(如 Spring Boot 可设置 springfox.documentation.enabled=false),或在反向代理层做 Basic Auth/IP 白名单 访问控制。
  • OpenAPI/Swagger 文档中声明安全方案(如 OAuth2/JWT),便于 UI 展示与客户端使用:
    components:
      securitySchemes:
        bearerAuth:
          type: http
          scheme: bearer
          bearerFormat: JWT
    security:
      - bearerAuth: []
    
  • 运维侧建议:保持系统与依赖更新(如 sudo apt update && sudo apt upgrade)、开启防火墙仅放通必要端口(如 ufw)、对文档与接口访问进行日志审计与监控。

0