温馨提示×

Linux下Swagger如何加密

小樊
38
2026-07-10 14:04:01
栏目: 网络安全

在 Linux 下,Swagger 本身不自带加密机制,所谓“Swagger 加密”通常指下面几种常见需求之一。你可以对照场景选择方案:


一、Swagger 接口文档访问控制(最常见)

✅ 方式 1:关闭或限制 Swagger UI(推荐)

生产环境直接禁用 Swagger

Spring Boot 示例:

@Profile("!prod")
@Configuration
public class SwaggerConfig {
    // 只在非 prod 环境启用
}

或:

spring:
  profiles: active: prod

✅ 方式 2:Swagger 增加账号密码(Basic Auth)

使用 Spring Security

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/swagger-ui/**", "/v3/api-docs/**")
                .authenticated()
                .anyRequest().permitAll()
            )
            .httpBasic(Customizer.withDefaults());

        return http.build();
    }

    @Bean
    public UserDetailsService users() {
        UserDetails user = User.withDefaultPasswordEncoder()
                .username("admin")
                .password("admin123")
                .roles("ADMIN")
                .build();
        return new InMemoryUserDetailsManager(user);
    }
}

访问 Swagger 时会弹出登录框 ✅


二、Swagger 访问使用 HTTPS(传输加密)

✅ Nginx + HTTPS(推荐)

server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    location /swagger-ui/ {
        proxy_pass http://127.0.0.1:8080;
    }
}

HTTP 自动跳转 HTTPS:

server {
    listen 80;
    return 301 https://$host$request_uri;
}

✅ 防止 Swagger 内容被中间人抓包


三、Swagger 接口内容加密(较少见)

⚠️ Swagger 通常不负责业务数据加密
加密应在 接口层 / 数据层

常见做法

  • HTTPS(必须有)
  • 请求/响应体 AES / RSA 加密
  • 自定义 Header Token / Sign

四、Swagger 文档 IP 白名单(Linux 层)

✅ Nginx 限制 IP

location /swagger-ui/ {
    allow 1.2.3.4;
    deny all;
    proxy_pass http://127.0.0.1:8080;
}

或 Linux iptables(不推荐):

iptables -A INPUT -p tcp --dport 8080 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP

五、如果你指的是“Swagger JSON 加密”

不能也不应该加密
Swagger JSON 是文档协议,加密后前端无法解析

✅ 正确做法:

  • 不对外暴露
  • 限制访问权限
  • 使用 HTTPS

推荐安全方案(总结)

场景 推荐方案
生产环境 ❌ 禁用 Swagger
内部使用 ✅ 账号密码 + IP 白名单
防止窃听 ✅ HTTPS
接口安全 ✅ Token / 签名
文档保密 ✅ 不加外网访问

如果你愿意,可以告诉我:

  • 用的是 Spring Boot / Node / Python / Go
  • Swagger 2 还是 OpenAPI 3
  • 想防的是 (公网 / 内部 / 爬虫)?

我可以直接给你一份可复制的完整配置

0