文档菜单
文档首页
/ / /
C#/.NET
/ /

在连接上启用 TLS

本页内容

  • 概述
  • 启用 TLS
  • 配置客户端证书
  • 允许不安全 TLS
  • 检查证书吊销
  • 操作系统级别的吊销检查
  • API 文档

在本指南中,您可以学习如何使用TLS/SSL 协议,使用.NET框架中底层的TLS/SSL支持。要配置您的连接以使用TLS/SSL,请启用以下任一选项的TLS/SSL设置:连接字符串MongoClientSettings。

重要

TLS 1.2

.NET/C# 驱动程序仅支持TLS 1.2或更高版本。

默认情况下,连接到MongoDB实例时TLS是禁用的。您可以通过以下两种不同的方式为连接到您的MongoDB实例启用TLS:在MongoClientSettings 对象上使用属性或在您的连接字符串中通过参数。

注意

如果您通过DNS种子列表协议连接,驱动程序将默认启用TLS/SSL。要禁用它,请在您的连接字符串或 MongoClientSettings 实例中将 tlsssl 参数值设置为 false

有关使用DNS种子列表时连接行为的更多信息,请参阅服务器手册中的 SRV连接格式 部分。

要使用 MongoClientSettings 对象启用TLS,将 UseTls 属性设置为 true

var settings = new MongoClientSettings { UseTls = true };
var client = new MongoClient(settings);

要使用连接字符串启用TLS,请将参数tls在传递给MongoClient构造函数的连接字符串中赋值为true

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true");

您可以使用MongoClientSettings配置您的X.509证书。以下代码示例使用名为client.p12的证书文件创建一个新的X.509证书对象,该文件由密码mySuperSecretPassword保护。然后代码将此证书添加到MongoClientSettings中的SslSettings.ClientCertificates数组。

var cert = new X509Certificate2("client.p12", "mySuperSecretPassword");
var settings = new MongoClientSettings
{
SslSettings = new SslSettings
{
ClientCertificates = new[] { cert }
},
UseTls = true
};

重要

当使用密码加载证书时,证书对象必须包含一个私钥。如果没有,您的证书将不会传递到服务器。

当启用TLS时,.NET/C#驱动程序会自动验证服务器提供的证书。当测试代码时,您可以禁用证书验证。这被称为不安全TLS

在使用不安全TLS时,唯一的要求是服务器提供一个X.509证书。即使以下任何一项为真,驱动程序也会接受证书:

  • 服务器的主机名和证书上的主题名(或主题备用名)不匹配。

  • 证书已过期或尚未生效。

  • 证书链中没有受信任的根证书。

  • 证书用途对于服务器标识无效。

您可以通过两种方式允许不安全TLS:通过MongoClientSettings对象上的属性或通过连接字符串中的参数。

要使用MongoClientSettings对象允许不安全TLS,将AllowInsecureTls属性设置为true

var settings = new MongoClientSettings
{
UseTls = true,
AllowInsecureTls = true
};
var client = new MongoClient(settings);

要使用连接字符串允许不安全TLS,将连接字符串参数tlsInsecure赋值为true

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsInsecure=true");

警告

在生产环境中,始终将该选项设置为false。出于安全原因,确保服务器证书得到正确验证非常重要。

当X.509证书不再可信时——例如,如果其私钥已被泄露——证书颁发机构将吊销该证书。

默认情况下,.NET/C#驱动程序在连接之前不会检查服务器的证书是否已被吊销。您可以使用MongoClientSettings或连接字符串来启用吊销检查。

要使用MongoClientSettings启用吊销检查,将SslSettings.CheckCertificateRevocation设置为true

var settings = new MongoClientSettings
{
SslSettings = new SslSettings
{
CheckCertificateRevocation = true
},
UseTls = true
};

要使用连接字符串启用吊销检查,将连接字符串参数tlsDisableCertificateRevocationCheck的值设置为false

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsDisableCertificateRevocationCheck=false");

注意

.NET/C# 驱动程序默认不检查撤销,因为这与 SslStream 类在以下两个环境中的默认行为一致:[.NET 框架](https://learn.microsoft.com/en-us/dotnet/api/system.net.security.sslstream.authenticateasclient?view=netframework-4.8#System_Net_Security_SslStream_AuthenticateAsClient_System_String_) 和 [NET 标准库](https://learn.microsoft.com/en-us/dotnet/api/system.net.security.sslstream.authenticateasclient?view=netstandard-2.1#System_Net_Security_SslStream_AuthenticateAsClient_System_String_)

.NET/C# 驱动程序在 Windows、macOS 和 Linux 上对以下撤销检查机制的支持方式不同

在Windows上,.NET/C# 驱动器支持OCSP、OCSP Stapling以及无OCSP的CRL,在.NET Framework和.NET Core中均支持。

警告

在Windows上,如果OCSP响应者不可用,.NET/C# 驱动器将报告“硬失败”并取消TLS握手。其他操作系统和驱动器将报告“软失败”并继续连接。

在macOS上,.NET/C# 驱动器支持OCSP和OCSP Stapling。

从.NET Core 2.0开始,驱动器不再支持无OCSP的CRL。

在Linux上,.NET/C# 驱动器支持OCSP、OCSP Stapling以及无OCSP的CRL。

要了解更多关于本指南中讨论的任何连接选项,请参阅以下 API 文档

返回

连接选项