通过 npgsql 使用 ca 证书连接到 .NET Core 上的 DO Postgres 集群
Connecting to a DO Postgres Cluster on .NET Core with a ca certificate via npgsql
我实际上正在使用 DigitalOcean 的 Postgres 集群。设法使用我拥有的凭据通过 DataGrip 连接到服务器,但我在 .NET Core 上面临身份验证问题。显然,您需要使用给定的凭据 + 提供的 ca 证书进行身份验证(DigitalOcean 提供 CA)。
services.AddDbContext<NozomiDbContext>(options =>
{
options.UseNpgsql(mainDb
, builder =>
{
builder.EnableRetryOnFailure();
builder.ProvideClientCertificatesCallback(certificates =>
{
var cert = new X509Certificate2("ca-certificate.crt");
certificates.Add(cert);
});
}
);
options.EnableSensitiveDataLogging(false);
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
}, ServiceLifetime.Transient);
之后,运行 项目结果:
System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
我做错了什么?如果这还不够,真的很抱歉。
顺便说一句,我在 PG 11.4 上。
您的服务器证书可能是自签名的或由于某种原因无法验证。您可以通过在连接字符串上添加 Trust Server Certificate=true
来告诉 Npgsql 禁用检查服务器证书。
我实际上正在使用 DigitalOcean 的 Postgres 集群。设法使用我拥有的凭据通过 DataGrip 连接到服务器,但我在 .NET Core 上面临身份验证问题。显然,您需要使用给定的凭据 + 提供的 ca 证书进行身份验证(DigitalOcean 提供 CA)。
services.AddDbContext<NozomiDbContext>(options =>
{
options.UseNpgsql(mainDb
, builder =>
{
builder.EnableRetryOnFailure();
builder.ProvideClientCertificatesCallback(certificates =>
{
var cert = new X509Certificate2("ca-certificate.crt");
certificates.Add(cert);
});
}
);
options.EnableSensitiveDataLogging(false);
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
}, ServiceLifetime.Transient);
之后,运行 项目结果:
System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
我做错了什么?如果这还不够,真的很抱歉。
顺便说一句,我在 PG 11.4 上。
您的服务器证书可能是自签名的或由于某种原因无法验证。您可以通过在连接字符串上添加 Trust Server Certificate=true
来告诉 Npgsql 禁用检查服务器证书。