.NET Core微服务部署安全检查

BadApp +0/-0 0 0 正常 2025-12-24T07:01:19 微服务

最近在部署.NET Core微服务时踩了个大坑,记录一下部署安全检查的血泪史。

问题背景

项目使用.NET 6.0 + Docker部署,微服务间通过JWT Token进行认证。上线后发现生产环境频繁出现500错误,排查发现是证书配置问题导致的认证失败。

实际踩坑过程

1. 证书配置错误

最初在docker-compose.yml中这样配置:

services:
  api-gateway:
    image: myapp:latest
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=https://+:443
    volumes:
      - ./certs:/certs:ro

但是容器内证书路径始终找不到,最终发现需要在Dockerfile中添加:

COPY certs/ /app/certs/
RUN chmod 755 /app/certs/

2. 密钥硬编码风险

在Startup.cs中看到这样的代码:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://auth.myapp.com",
            ValidateAudience = true,
            ValidAudience = "myapp-api",
            ValidateLifetime = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("hardcoded-secret-key"))
        };
    });

3. 端口暴露问题

生产环境忘记关闭调试端口,导致安全扫描工具直接扫描到内部API端点。

解决方案

  1. 使用Azure Key Vault或Vault Secrets进行密钥管理
  2. 部署前执行dotnet publish -c Release再构建Docker镜像
  3. 添加安全头配置:
app.Use(async (context, next) =>
{
    context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
    context.Response.Headers.Add("X-Frame-Options", "DENY");
    await next();
});

部署检查清单

  •  证书路径正确性验证
  •  密钥配置安全性检查
  •  端口暴露情况确认
  •  日志级别设置
  •  健康检查端点配置

记住:微服务安全不是部署后才考虑的问题,而是从架构设计阶段就要纳入考量。

推广
广告位招租

讨论

0/2000
RoughSmile
RoughSmile · 2026-01-08T10:24:58
证书配置确实容易被忽视,建议在Dockerfile中明确指定证书复制路径并验证权限,同时使用volume挂载时确保宿主机目录权限正确。此外,生产环境应避免将证书文件直接拷贝进镜像,推荐通过Secrets管理或云服务集成方式注入。
SoftIron
SoftIron · 2026-01-08T10:24:58
密钥硬编码是典型的安全漏洞,应立即迁移至Azure Key Vault或类似工具,并通过环境变量或配置中心动态加载。建议在CI/CD流程中加入安全扫描步骤,自动检测代码中的敏感信息暴露问题。