Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Npgsql提供客户端证书和密钥_Postgresql_Entity Framework_Entity Framework Core_Npgsql - Fatal编程技术网

Postgresql Npgsql提供客户端证书和密钥

Postgresql Npgsql提供客户端证书和密钥,postgresql,entity-framework,entity-framework-core,npgsql,Postgresql,Entity Framework,Entity Framework Core,Npgsql,我正在尝试建立到PGSQL服务器的连接,该连接需要客户端证书和密钥才能运行 首先,我可以使用SQLGate工作验证与Postgres数据库的连接。提供主机、用户、密码、端口、数据库并标记使用SSL,然后在SSL下提供证书和密钥。如果没有这两个项目,连接将无法运行。由于某种原因,NpgsqlConnectionStringBuilder不包含某种类型的客户机密钥的定义,因此我使用NPGSQL提供了除密钥以外的所有密钥 var connectionString = new NpgsqlConnec

我正在尝试建立到PGSQL服务器的连接,该连接需要客户端证书和密钥才能运行


首先,我可以使用SQLGate工作验证与Postgres数据库的连接。提供主机、用户、密码、端口、数据库并标记使用SSL,然后在SSL下提供证书和密钥。如果没有这两个项目,连接将无法运行。由于某种原因,
NpgsqlConnectionStringBuilder
不包含某种类型的客户机密钥的定义,因此我使用NPGSQL提供了除密钥以外的所有密钥

var connectionString = new NpgsqlConnectionStringBuilder();
connectionString.Host = rInfo.Host;
int portNumber = 5432;
int.TryParse(rInfo.Port, out portNumber);
connectionString.Port = portNumber;
connectionString.Database = rInfo.dbName;
connectionString.Username = rInfo.Username;
connectionString.Password = rInfo.Password;
connectionString.SslMode = SslMode.Prefer;
connectionString.TrustServerCertificate = true;
connectionString.ClientCertificate = rInfo.CertFilePath;
//Poke the database, see if we can get in.
try
{
    NpgsqlConnection npgsqlConnection = new NpgsqlConnection(connectionString.ToString());
    npgsqlConnection.ProvideClientCertificatesCallback += provideCertificates;
    npgsqlConnection.UserCertificateValidationCallback += validateCertificates;
    npgsqlConnection.Open();
    npgsqlConnection.Close();
    return connectionString.ToString();
}
例外情况是:

错误28000:连接需要有效的客户端证书

这是意料之中的,因为我没有在任何地方提供钥匙。我尝试通过猜测将密钥添加到连接字符串中:

connectionString.Add(新的KeyValuePair(“客户机密钥”,rInfo.KeyFilePath))

但这还没有被认识到。将其标记为
sslkey
,但返回时也无法识别。我最好的猜测是使用
providedclientcertificatescallback
回调来提供证书,但我不知道如何让它与密钥配对,因为它只是要求一个
X509CertificateCollection

我们之前使用的工具是由Devart提供的,但是我们已经失去了许可证。我们还将连接到一系列数据库(具有相同的模式),而不仅仅是一个数据库


我的选项是什么?

您可以放置由
PGSSLCERT
PGSSLKEY
环境变量指定的文件。我们不能。如上所述:
我们还将连接到一系列数据库(使用相同的模式),而不仅仅是一个。
不确定您是否已经找到了问题的答案,但看起来是相关的。阅读它意味着此功能的增强即将到来,但是还不可用。您有解决此问题的方法吗?您可以放置由
PGSSLCERT
PGSSLKEY
环境变量指定的文件。我们不能。如上所述:
我们还将连接到一系列数据库(使用相同的模式),而不仅仅是一个数据库。
不确定您是否已经找到问题的答案,但看起来像是相关的。阅读它意味着此功能的增强功能即将推出,但尚未可用。您对此问题有解决方案吗?