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

.NET Core应用通过TLS连接Redis服务器失败求助

解决.NET Core应用在Cloud Run上连接TLS Memorystore Redis的证书问题

错误原因分析

  1. PartialChain错误:客户端未信任Memorystore的CA证书,导致服务器证书链验证不通过。你之前错误地将CA证书作为客户端证书提交,而实际上Memorystore的TLS仅要求客户端信任服务器证书(单向认证),不需要客户端发送证书。
  2. CreateFromPemFile错误:该方法用于加载包含私钥的PEM证书,而server-ca.pem是仅含公钥的CA证书链,因此无法解析。

正确解决方案

核心思路

不需要提交客户端证书,而是让客户端信任Memorystore的CA证书,通过自定义证书验证回调来完成服务器证书的信任校验。

完整代码示例

using StackExchange.Redis;
using System.Security.Cryptography.X509Certificates;

// 加载下载的server-ca.pem证书
var caCertificate = new X509Certificate2("server-ca.pem");
var trustedCerts = new X509Certificate2Collection { caCertificate };

var redisConfig = new ConfigurationOptions
{
    EndPoints = { {"你的Redis实例IP", 6378} }, // 替换为实际的Memorystore地址和端口
    Ssl = true,
    SslProtocols = SslProtocols.Tls12,
    // 自定义证书验证逻辑,信任我们加载的CA证书
    CertificateValidation = (sender, cert, chain, errors) =>
    {
        // 将CA证书添加到验证链的额外存储中
        chain.ChainPolicy.ExtraStore.AddRange(trustedCerts);
        // 重新构建证书链
        chain.Build(new X509Certificate2(cert));
        // 检查链中是否没有错误
        return chain.ChainStatus.All(status => status.Status == X509ChainStatusFlags.NoError);
    }
};

// 建立Redis连接
var multiplexer = ConnectionMultiplexer.Connect(redisConfig);

额外注意事项

  1. 网络连通性:确保Cloud Run服务已配置VPC连接器,能够访问Memorystore Redis所在的私有网络(Memorystore默认不允许公网访问)。
  2. 证书文件部署:将server-ca.pem文件正确打包到Cloud Run的镜像中,确保代码能读取到该文件路径。
  3. 权限配置:Cloud Run服务账号需拥有redis.client角色权限,允许访问Memorystore实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:47:25