TLS 与安全
mTLS 概念、内网服务间调用。
25 分钟
TLS 与安全
gRPC 生产环境应启用 TLS;服务间零信任场景用 mTLS(双向证书)。Lab 可用 usePlaintext(),禁止 带入生产或公网。
学习目标
- 理解 Channel 加密与服务端凭据配置
- 知道 mTLS 在微服务网格中的角色
- 明确
/tracksREST 与 gRPC lab 的安全边界差异
核心内容
TLS 基础(Java Server)
Server server = ServerBuilder.forPort(9090)
.useTransportSecurity(certChainFile, privateKeyFile)
.addService(trackGrpcService)
.build();
Client:
ManagedChannel channel = Grpc.newChannelBuilderForAddress(
"track-service.internal", 9090,
TlsChannelCredentials.create())
.build();
凭据来自 K8s Secret 或 spring-cloud-essentials 配置中心——与 REST HTTPS 证书管理类似。
mTLS 概念
| 模式 | 谁验证谁 |
|---|---|
| TLS | 客户端验证服务端证书 |
| mTLS | 双方互相验证证书 |
Service mesh(Istio/Linkerd)常自动注入 sidecar 处理 mTLS;应用层 gRPC 可专注业务 Status。
与 REST 安全对照
本站 REST 使用 Spring Security + JWT(spring-boot-essentials):
GET /tracks → 可选 JWT、CORS、Rate limit
gRPC lab → TLS/mTLS + Metadata token(实验)
gRPC Metadata 可承载 authorization Bearer,等价 HTTP Header。公开课程读接口仍 REST——WAF、CDN 对 JSON GET 更成熟。
Lab 禁区
.usePlaintext() // 仅 localhost lab-grpc
- 勿在公网 IP 暴露 9090 plaintext
- 勿与 graphql-essentials 实验混用未授权 Admin 端口
生产:内网 gRPC + mTLS;外网仅 REST /tracks 或 API Gateway。
练习
- 列出 lab 与生产各 3 条安全检查项
- 阅读 Spring Security 过滤器链,对比 gRPC
ServerInterceptor - 说明为何浏览器不直接 mTLS 调 gRPC