Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Kotlin
/

Habilitar TLS em uma conexão

Nesta página

  • Visão geral
  • Habilitar TLS
  • Configurar certificados
  • Configurar o JVM Trust Store
  • Configurar o Armazenamento de Chaves JVM
  • Configurar um armazenamento confiável e um armazenamento de chaves específicos do cliente
  • Desativar verificação de nome de host
  • Restringir conexões ao TLS 1,2 Apenas
  • Personalizar configuração TLS através do Java SE SSLContext
  • Protocolo de status do certificado online (OCSP)
  • OCSP orientado ao cliente
  • Grampeamento de OCLC
  • Documentação da API

Neste guia, você aprenderá a usar o TLS protocolo de segurança ao se conectar ao MongoDB usando o driver Kotlin Sync.

Você pode habilitar o TLS em uma conexão com sua instância MongoDB das seguintes maneiras:

  • Definindo o parâmetro tls em sua connection string

  • Utilizando o método enabled() da classe SslSettings.Builder ao criar uma instância do MongoClientSettings

Observação

Protocolo de lista de sementes de DNS habilita TLS

Se você se conectar usando o protocolo seedlist DNS, indicado pelo prefixo mongodb+srv em sua connection string, o driver ativará automaticamente o TLS.

Para saber mais sobre o comportamento da conexão ao usar uma seedlist DNS, consulte a seção Formato de conexão SRV do guia Connection strings no manual do servidor.

Para habilitar o TLS em uma conexão usando uma cadeia de conexão, defina a opção tls como true no parâmetro de opções e passe a string para MongoClient.create(), conforme mostrado no código a seguir:

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

Para habilitar o TLS em uma instância do MongoClientSettings , utilize o método de construtor do applyToSslSettings() . Defina a propriedade enabled como true no bloco SslSettings.Builder , conforme mostrado no código a seguir:

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

Observação

Depuração de TLS

Se tiver problemas para configurar a conexão TLS, poderá usar a -Djavax.net.debug=all propriedade do sistema para exibir declarações de registro úteis. Consulte Depuração de conexões SSL/TLS na documentação da linguagem Java para obter mais informações.

Os aplicativos Kotlin que iniciam solicitações TLS exigem acesso a certificados criptográficos que comprovam a identidade do aplicativo e verificam outros aplicativos com os quais o aplicativo Kotlin interage. Você pode configurar o acesso a esses certificados em seu aplicativo das seguintes maneiras:

  • Usando um armazenamento confiável JVM e um armazenamento JVM de chaves

  • Usando um armazenamento confiável e um armazenamento de chaves específicos do cliente

Observação

Por padrão, o JRE inclui muitos certificados públicos comumente usados de autoridades de assinatura, como o Let's Encrypt. Como resultado, você pode habilitar o TLS ao se conectar a uma instância do MongoDB Atlas ou a qualquer outro servidor cujo certificado seja assinado por uma autoridade no repositório de certificados padrão do JRE, com o TLS habilitado sem configurar o repositório de confiança.

O armazenamento confiável da JVM salva certificados que identificam com segurança outros aplicativos com os quais seu aplicativo Kotlin interage. Ao usar esses certificados, seu aplicativo pode provar que a conexão com outro aplicativo é genuína e segura contra adulteração por terceiros.

Se sua instância do MongoDB usa um certificado assinado por uma autoridade que não está presente no armazenamento de certificados padrão do JRE, seu aplicativo deve configurar as seguintes propriedades do sistema para iniciar solicitações TLS.

  • javax.net.ssl.trustStore: Caminho para um armazenamento de confiança que contém os certificados TLS do cliente

  • javax.net.ssl.trustStorePassword: Senha para acessar o armazenamento de confiança definido em javax.net.ssl.trustStore

Essas propriedades garantem que seu aplicativo possa validar o certificado TLS apresentado por uma instância conectada do MongoDB.

Você pode criar um armazenamento confiável usando a ferramenta keytool ferramenta de linha de comando do JDK, conforme mostrado no seguinte comando do terminal:

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

Observação

Por padrão, as instâncias do MongoDB não executam validação de certificado de cliente. Você deve configurar o armazenamento de chaves se configurou sua instância do MongoDB para validar certificados de cliente.

Um aplicativo que inicia solicitações TLS deve definir as seguintes propriedades do sistema JVM para garantir que o cliente apresente um certificado TLS para o servidor MongoDB:

  • javax.net.ssl.keyStore: Caminho para um armazenamento de chaves que contém os certificados TLS/SSL do cliente

  • javax.net.ssl.keyStorePassword: Senha para acessar o armazenamento de chaves definido em javax.net.ssl.keyStore

Você pode criar um armazenamento de chaves usando a ferramenta keytool ou openssl ferramenta de linha de comando.

Para saber mais sobre como configurar um aplicativo Kotlin para usar TLS, consulte o Guia de Referência JSSE na documentação da linguagem Java.

Você pode configurar um armazenamento confiável e um armazenamento de chaves específicos do cliente usando o método init() da classe SSLContext .

Encontre um exemplo mostrando como configurar um cliente para usar uma instância do SSLContext na seção Personalizar Configuração TLS através da seção SSLContext do Java SE deste guia.

Por padrão, o driver garante que o nome de host incluído nos certificados TLS do servidor corresponda aos nomes de host fornecidos ao construir um MongoClient. Para desabilitar a verificação do nome de host para seu aplicativo, configure a propriedade invalidHostNameAllowed do construtor para true no bloco de construtor applytoSslSettings() :

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

Aviso

A desativação da verificação de nome de host torna seu aplicativo desprotegido e potencialmente vulnerável a certificados expirados e processos externos que se apresentam como instâncias de cliente válidas.

Para restringir seu aplicativo para usar somente o protocolo TLS 1.2 , configure a propriedade do sistema jdk.tls.client.protocols para "TLSv1.2".

Observação

Java Runtime Environments (JREs) antes do Java 8 somente habilitam o protocolo TLS 1.2 em versões de atualização. Se o seu JRE não tiver habilitado o protocolo TLS 1.2, atualize para uma versão posterior para se conectar usando o TLS 1.2.

Se sua configuração do TLS exigir personalização, você poderá definir a sslContext propriedade do seu MongoClient passando um SSLContext objeto para o context() construtor de método no applyToSslSettings() bloco :

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

Para mais informações sobre a classe SSLContext, consulte a documentação API para Contexto SSL.

OCSP é um padrão usado para verificar se os certificados X.509 foram revogados. Uma autoridade de certificação pode adicionar um certificado X.509 à Lista de revogação de certificados (CRL) antes do tempo de expiração para invalidar o certificado. Quando um cliente envia um certificado X.509 durante o handshake TLS, o servidor de revogação da CA verifica a CRL e retorna um status de good, revoked ou unknown.

O condutor suporta as seguintes variações de OCSP:

  • OCSP orientado ao cliente

  • Grampeamento de OCLC

As seções a seguir descrevem as diferenças entre elas e como habilitá-las para seu aplicativo.

Observação

O driver Kotlin Sync usa os argumentos JVM configurados para o aplicativo e não pode ser substituído por uma instância MongoClient específica.

No OCSP controlado pelo cliente, o cliente envia o certificado em uma solicitação OCSP para um respondente OCSP depois de receber o certificado do servidor. O respondente do OCSP verifica o status do certificado com uma autoridade de certificação (CA) e relata se ele é válido em uma resposta enviada ao cliente.

Para habilitar o OCSP orientado ao cliente para seu aplicativo, defina as seguintes propriedades do sistema JVM:

Propriedade
Valor
com.sun.net.ssl.checkRevocation
Configure esta propriedade para true para habilitar a verificação de revogação.
ocsp.enable
Configure esta propriedade para true para habilitar OCSP orientado ao cliente.

Aviso

Se o respondente OCSP não estiver disponível, o suporte a TLS fornecido pelo JDK relatará uma "falha rígida". Isso difere do comportamento de "falha suave" do MongoDB Shell e de alguns outros drivers.

O grampeamento OCSP é um mecanismo no qual o servidor deve obter o certificado assinado da autoridade de certificação (CA) e incluí-lo em uma resposta OCSP com carimbo de data/hora para o cliente.

Para habilitar o grampeamento OCSP para seu aplicativo, defina as seguintes propriedades do sistema JVM:

Propriedade
Descrição
com.sun.net.ssl.checkRevocation
Configure esta propriedade para true para habilitar a verificação de revogação.
jdk.tls.client.enableStatusRequestExtension
Set this property to true to enable OCSP stapling.

If unset or set to false, the connection can proceed regardless of the presence or status of the certificate revocation response.

Para mais informações sobre OCSP, consulte os seguintes recursos:

Para obter mais informações sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Especificar opções de conexão