You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让自签名证书同时支持本地及Google Cloud Run的gRPC通信

问题根源

当前生成的服务器证书仅将localhost设为唯一有效域名,部署到Google Cloud Run后,服务实际域名是xxx.run.app格式,TLS握手时域名不匹配导致gRPC连接失败。要同时支持本地和生产环境,需要给服务器证书添加多域名扩展(SAN,Subject Alternative Names),覆盖本地环境和Cloud Run的域名。

调整后的证书生成方案

1. 创建SAN扩展配置文件

新建openssl-san.cnf文件,定义需要支持的域名和IP:

[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext

[dn]
C=CL
ST=RM
L=Santiago
O=Test
OU=Server
CN=localhost

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = *.run.app  # 可替换为你的具体Cloud Run服务域名(如my-service-123.run.app),安全性更高
IP.1 = 127.0.0.1   # 支持本地IP访问

2. 修改证书生成脚本

更新generator.sh,在生成服务器CSR和签名证书时引用上述配置:

# Clean Up
rm *.crt *.csr *.key *.cnf

echo "Generating certificates ..."

# 生成CA证书
openssl genrsa -passout pass:1111 -des3 -out ca.key 4096
openssl req -passin pass:1111 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Test/CN=ca"

# 生成带SAN扩展的服务器证书
openssl genrsa -passout pass:1111 -des3 -out server.key 4096
openssl req -passin pass:1111 -new -key server.key -out server.csr -config openssl-san.cnf
openssl x509 -req -passin pass:1111 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -extensions req_ext -extfile openssl-san.cnf
openssl rsa -passin pass:1111 -in server.key -out server.key

# 生成客户端证书(保持原有逻辑,若需客户端多环境支持可参照服务器配置添加SAN)
openssl genrsa -passout pass:1111 -des3 -out client.key 4096
openssl req -passin pass:1111 -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Client/CN=localhost"
openssl x509 -req -passin pass:1111 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt
openssl rsa -passin pass:1111 -in client.key -out client.key
关键注意事项
  • SAN扩展有效性:subjectAltName是TLS验证的核心依据,必须包含所有需要访问服务的域名/IP,gRPC会严格校验这一字段。
  • Cloud Run域名优化:若你的服务有固定域名(如my-service-abc123.run.app),建议替换*.run.app为该具体域名,避免通配符带来的安全风险。
  • 证书部署:Cloud Run服务需加载新生成的server.crt和server.key;所有客户端(本地和生产)都需加载ca.crt以信任自签名证书,避免TLS验证错误。
  • 客户端证书:若服务端需要验证客户端身份,可参照服务器配置给客户端证书添加SAN,否则保持原有配置即可。

内容的提问来源于stack exchange,提问作者ololo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:10:37