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
Visão geral
Neste guia, você aprenderá a usar o TLS protocolo de segurança ao se conectar ao MongoDB usando o driver Kotlin Sync.
Habilitar TLS
Você pode habilitar o TLS em uma conexão com sua instância MongoDB das seguintes maneiras:
Definindo o parâmetro
tls
em sua string de conexãoUtilizando o método
enabled()
da classeSslSettings.Builder
ao criar uma instância doMongoClientSettings
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 string de conexão, 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 string de conexão 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 propriedade do sistema -Djavax.net.debug=all
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.
Configurar certificados
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 aplicação Kotlin interage. Você pode configurar o acesso a esses certificados em seu aplicação 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
Configurar o JVM Trust Store
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 aplicação Kotlin interage. Ao usar esses certificados, seu aplicação pode provar que a conexão com outro aplicação é 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 aplicação 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 clientejavax.net.ssl.trustStorePassword
: Senha para acessar o armazenamento de confiança definido emjavax.net.ssl.trustStore
Essas propriedades garantem que seu aplicação 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>
Configurar o Armazenamento de Chaves JVM
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 aplicação 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 clientejavax.net.ssl.keyStorePassword
: Senha para acessar o armazenamento de chaves definido emjavax.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 aplicação Kotlin para usar TLS, consulte o Guia de Referência JSSE na documentação da linguagem Java .
Configurar um armazenamento confiável e um armazenamento de chaves específicos do cliente
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.
Desativar verificação de nome de host
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 aplicação, 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 aplicação desprotegido e potencialmente vulnerável a certificados expirados e processos externos que se apresentam como instâncias de cliente válidas.
Restringir conexões ao TLS 1,2 Apenas
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.
Personalizar configuração TLS através do Java SE SSLContext
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.
Protocolo de status do certificado online (OCSP)
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 aplicação e não pode ser substituído por uma instância MongoClient
específica.
OCSP orientado ao cliente
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.
Grampeamento de OCLC
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:
Documentação do Oracle JDK 8 sobre como habilitar o OCSP para um aplicativo
Documentação da API
Para obter mais informações sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: