最近在部署.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端点。
解决方案
- 使用Azure Key Vault或Vault Secrets进行密钥管理
- 部署前执行
dotnet publish -c Release再构建Docker镜像 - 添加安全头配置:
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
context.Response.Headers.Add("X-Frame-Options", "DENY");
await next();
});
部署检查清单
- 证书路径正确性验证
- 密钥配置安全性检查
- 端口暴露情况确认
- 日志级别设置
- 健康检查端点配置
记住:微服务安全不是部署后才考虑的问题,而是从架构设计阶段就要纳入考量。

讨论