对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs 菜单

在连接上启用 TLS/SSL

在本指南中,您可以学习如何通过使用 Kotlin Sync 驱动程序连接到 MongoDB 时使用 TLS 安全协议。

您可以通过以下方式在与 MongoDB 实例的连接上启用 TLS:

  • 在连接string中设置 tls 参数

  • 创建MongoClientSettings实例时使用SslSettings.Builder类中的enabled()方法

注意

DNS 种子列表协议启用 TLS

如果使用 DNS 种子列表协议(由连接字符串中的 mongodb+srv 前缀表示)进行连接,则驱动程序会自动启用 TLS。

要学习;了解有关使用 DNS 种子列表时的连接行为的更多信息,请参阅服务器手册中连接字符串指南的SRV 连接格式部分。

要使用连接string在连接上启用TLS,请在选项参数中将 tls 选项设立为 true 并将string传递给 MongoClient.create(),如以下代码所示:

val mongoClient = MongoClient.create("mongodb+srv://<db_username>:<db_password>@<cluster_url>/?tls=true")

要在MongoClientSettings实例中启用TLS,请使用applyToSslSettings()构建器方法。 在SslSettings.Builder区块中将enabled属性设置为true ,如以下代码所示:

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection string URI>"))
.applyToSslSettings { builder ->
builder.enabled(true)
}
.build()
val mongoClient = MongoClient.create(settings)

注意

调试 TLS

如果您在设置 TLS 连接时遇到问题,可以使用 -Djavax.net.debug=all 系统属性来查看有用的日志语句。有关更多信息,请参阅Java语言文档中的调试 SSL/TLS 连接

发起 TLS 请求的Kotlin应用程序需要访问权限加密证书,以证明应用程序的身份并验证与Kotlin应用程序交互的其他应用程序。 您可以通过以下方式在应用程序中配置对这些证书的访问权限:

  • 使用Java虚拟机(JVM)信任存储和Java虚拟机(JVM)密钥存储

  • 使用特定于客户端的信任存储和密钥存储

注意

默认下,JRE 包含许多来自 Let's Encrypt 等签名机构的常用公共证书。因此,在连接到MongoDB Atlas实例或其证书由 JRE默认证书存储中的颁发机构签名的任何其他服务器时,您可以启用TLS,并且无需配置信任存储即可启用 TLS。

Java虚拟机(JVM)信任存储区保存的证书可安全地标识与您的Kotlin应用程序交互的其他应用程序。 通过使用这些证书,您的应用程序可以证明与另一个应用程序的连接是真实的,并且是安全的,不会被第三方篡改。

如果您的MongoDB实例使用由 JRE默认证书存储中不存在的颁发机构签名的证书,则您的应用程序必须配置以下系统属性才能发起 TLS 请求。

  • javax.net.ssl.trustStore:包含客户端 TLS 证书的信任存储区的路径

  • javax.net.ssl.trustStorePassword:用于访问权限信任存储的密码,这些信任库在 javax.net.ssl.trustStore

这些属性确保您的应用程序可以验证连接的MongoDB实例提供的 TLS 证书。

您可以使用 JDK 中的keytool命令行工具创建信任存储,如以下终端命令所示:

keytool -importcert -trustcacerts -file <path to certificate authority file>
-keystore <path to trust store> -storepass <password>

注意

默认情况下,MongoDB 实例不执行客户端证书验证。如果将 MongoDB 实例配置为验证客户端证书,您必须配置密钥存储。

发起 TLS 请求的应用程序必须设立以下Java虚拟机(JVM)系统属性,以确保客户端向MongoDB服务器提供 TLS 证书:

  • javax.net.ssl.keyStore:包含客户端 TLS/SSL 证书的密钥存储区的路径

  • javax.net.ssl.keyStorePassword:用于访问权限密钥存储的密码,这些密钥库的定义在 javax.net.ssl.keyStore

您可以使用keytoolopenssl命令行工具创建密钥存储。

要学习;了解有关配置Kotlin应用程序以使用 TLS 的更多信息,请参阅Java语言文档中的JSSE 参考指南

您可以使用SSLContext类的init()方法配置客户端特定的信任存储和密钥存储。

在本指南的通过Java SE SSLContext 自定义 TLS 配置部分中,查看演示如何配置客户端以使用SSLContext示例的实例。

默认情况下,驱动程序确保服务器的 TLS 证书中包含的主机名与构造 MongoClient 时提供的主机名匹配。要为应用程序禁用主机名验证,请在 applytoSslSettings() 构建者区块中将构建者的 invalidHostNameAllowed属性设立为 true

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection string URI>"))
.applyToSslSettings { builder ->
builder.enabled(true)
builder.invalidHostNameAllowed(true)
}
.build()
val mongoClient = MongoClient.create(settings);

警告

禁用主机名验证会使应用程序不安全,并且可能容易受到过期证书和冒充有效客户端实例的外部进程的攻击。

要将应用程序限制为仅使用 TLS 1.2协议,请将jdk.tls.client.protocols系统属性设置为"TLSv1.2"

注意

Java 8 之前的 Java 运行时环境 (JRE) 仅在更新版本中启用了 TLS 1.2 协议。如果您的 JRE 未启用 TLS 1.2 协议,请升级到更高版本以使用 TLS 1.2 进行连接。

如果您的 TLS 配置需要自定义,您可以通过将SSLContext对象传递给 applyToSslSettings()区块中的 context() 方法构建器设立MongoClientsslContext属性:

val sslContext = SSLContext.getDefault()
val settings = MongoClientSettings.builder()
.applyToSslSettings { builder ->
builder.enabled(true)
builder.context(sslContext)
}
.build()
val mongoClient = MongoClient.create(settings);

有关 SSLContext 类的更多信息,请参阅 SSL 上下文 的API文档。

OCSP 是用于检查 X. 509证书是否已被撤销的标准。 证书颁发机构可以在到期时间之前将 X. 509证书添加到证书吊销列表 (CRL),以使该证书失效。 当客户端在 TLS 握手期间发送 X. 509证书时,CA 的吊销服务器会检查 CRL 并返回goodrevokedunknown状态。

该驱动程序支持以下 OCSP 变体:

  • 客户端驱动的 OCSP

  • OCSP 装订 (Stapling)

以下部分描述了变体之间的差异以及如何为您的应用程序启用这些变体。

注意

Kotlin Sync 驱动程序使用为应用程序配置的Java虚拟机(JVM)参数,并且无法针对特定的 MongoClient实例进行覆盖。

在客户端驱动的 OCSP 中,客户端在收到服务器发送的证书后,将 OCSP 请求中的证书发送给 OCSP 响应程序。OCSP 响应程序通过证书颁发机构 (CA) 检查证书的状态,并在发送给客户端的响应中报告证书是否有效。

要为您的应用程序启用客户端驱动的 OCSP,请设置以下 JVM 系统属性:

属性

com.sun.net.ssl.checkRevocation

将此属性设置为 true 以启用撤销检查。

ocsp.enable

将此属性设置为true以启用客户端驱动的 OCSP。

警告

如果 OCSP 响应程序不可用,JDK 提供的 TLS 支持会报告“硬故障”。这与 MongoDB Shell 和其他一些驱动程序的“软故障”行为不同。

OCSP 装订是一种机制,在该机制中,服务器必须从证书颁发机构 (CA) 获取签名证书,并将其包含在对客户端的带时间戳的 OCSP 响应中。

要为您的应用程序启用 OCSP 装订,请设置以下 JVM 系统属性:

属性
说明

com.sun.net.ssl.checkRevocation

将此属性设置为 true 以启用撤销检查。

jdk.tls.client.enableStatusRequestExtension

将此属性设置为true 以启用OCSP 装订。如果未设置或设立为

false,则无论证书吊销响应是否存在或状态如何,连接都可以继续。

有关 OCSP 的更多信息,请查看以下资源:

有关本指南中讨论的任何方法或类型的更多信息,请参阅以下API文档: