为连接启用 TLS
Overview
在本指南中,您可以学习;了解如何利用.NET框架中的根本的TLS/SSL支持,通过 TLS/SSL 安全协议连接到MongoDB实例。要配置连接以使用 TLS/SSL,请在 string连接字符串或 MongoClientSettings 中启用TLS/SSL 设置。
重要
TLS 1.2
.NET/ C#驱动程序仅支持 TLS 1.2 或更高版本。
启用 TLS
默认情况下,连接到 MongoDB 实例时禁用 TLS。 您可以通过两种不同的方式为MongoDB实例的连接启用 TLS:使用 MongoClientSettings
对象上的属性或通过连接string中的参数。
注意
如果您使用 DNS 种子列表协议进行连接,则驱动程序默认启用 TLS/SSL。要将其禁用,请在连接字符串或 MongoClientSettings
实例中将 tls
或 ssl
参数值设为 false
。
要进一步了解使用 DNS 种子列表时的连接行为,请参阅服务器手册中的 SRV 连接格式部分。
要使用 MongoClientSettings
对象启用 TLS,请将 UseTls
属性设置为 true
:
var settings = new MongoClientSettings { UseTls = true }; var client = new MongoClient(settings);
要使用连接string 为参数tls
分配值true
stringMongoClient
:
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
启用 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);
要使用连接string支持不安全的 TLS,请为连接string参数 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 };
要使用连接string启用撤销检查,请为连接string参数 tlsDisableCertificateRevocationCheck
分配值 false
:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsDisableCertificateRevocationCheck=false");
注意
.NET/C# 驱动程序默认情况下不检查撤销,因为这是 .NET 框架和 .NET 标准中 SslStream
类的默认行为。
按操作系统进行撤销检查
.NET/C# 驱动程序在 Windows、macOS 和 Linux 上以不同方式支持以下撤销检查机制:
在线证书状态协议 (OCSP),检查撤销的通用机制
OCSP 装订机制,服务器将带时间戳的 OCSP 响应与证书一起发送给客户端
证书吊销列表 (CRL),OCSP 的替代方案
Windows
在 Windows 上,.NET/C# 驱动程序在 .NET 框架和 .NET Core 中均支持 OCSP、OCSP 装订以及不使用 OCSP 的 CRL。
警告
在 Windows 上,如果 OCSP 响应程序不可用,.NET/C# 驱动程序将报告“硬故障”并取消 TLS 握手。其他操作系统和驱动程序将报告“软故障”并继续连接。
macOS
在 macOS 上,.NET/C# 驱动程序支持 OCSP 和 OCSP 装订。
从 .NET Core 2.0 开始,驱动程序不支持没有 OCSP 的 CRL。
Linux
在 Linux 平台上,.NET/C# 驱动程序支持 OCSP、OCSP 装订以及不使用 OCSP 的 CRL。
API 文档
要了解有关本指南中讨论的任何连接选项的详情,请参阅以下 API 文档: