错误:“无法设置 ssl 模式”

问题描述 投票:0回答:3

我正在尝试在连接字符串中设置

SSL Mode

SSL Mode=preferred;

但是当我的代码尝试连接到数据库时,我得到了

ArgumentException

请注意,

InnerException
说:

未找到请求的值“首选”。

查看以下文档,指定

required
disabled
preferred
应该是有效的:

我正在使用 Npgsql 3.0.3,这是我使用 NuGet 获得的:

npgsql
3个回答
6
投票

所以事实证明你实际上需要指定 verb 值而不是 adjectives:

  • Disable
  • Prefer
  • Require

例如:

SSL Mode=Prefer;

编辑文档已更正


4
投票

添加 sslmode=Require;Trust Server Certificate=true;,因为它在连接字符串中。它肯定会起作用。


2
投票

设置 Ssl 模式时允许使用以下值:

Npgsql v6.0+:

  • 禁用
  • 允许
  • 首选(默认)
  • 需要
  • 验证CA
  • 验证完整

Npgsql v6.0 之前版本:

  • 禁用(默认)
  • 更喜欢
  • 需要

默认值表示未指定 Ssl 模式时选择的设置。

文档链接: https://www.npgsql.org/doc/security.html#cryption-ssltls

Ssl 模式设置的值似乎也区分大小写。

使用“prefer”而不是“Prefer”时从日志文件中获取的示例:

Exception Type: System.ArgumentException
Exception Messsage: Couldn't set ssl mode, Parameter name: ssl mode
InnerException Messsage: Requested value 'prefer' was not found.

注意:上述日志来自使用 Npgsql 4.0.3 的 DotNet Core 2.1 应用程序(因此 v4.1+ 的区分大小写声明可能不再相关)

虽然发现该值区分大小写,但设置本身并不区分大小写(即 ssl mode 与 Ssl Mode 的工作原理相同);例如

Server=localhost;Port=5432;ssl mode='Prefer';...

Server=localhost;Port=5432;Ssl Mode='Prefer';...

两者都工作得很好。

旁白:

v3.0 之前的“允许”似乎是一个有效的设置,因为 v3.0 发行说明指出它已被删除; 请参阅 https://www.npgsql.org/doc/release-notes/3.0.html#ssl

大概是在 Npgsql 与 PostgreSQL 标准保持一致时,在 v.6.0 中再次重新引入了它; 请参阅https://www.npgsql.org/doc/release-notes/6.0.html#ssltls-improvements

v6.0 发行说明中的附加内容:

默认 SSL 模式现为 Prefer; 请参阅https://www.npgsql.org/doc/release-notes/6.0.html#the-default-ssl-mode-is-now-prefer

SSL 配置更改(SSL 模式=需要); 请参阅https://www.npgsql.org/doc/release-notes/6.0.html#changes-to-ssl-configuration-ssl-moderequire

© www.soinside.com 2019 - 2024. All rights reserved.