Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Ruby Driver
/

Configurar o TLS (Transport Layer Security)

Neste guia, você pode aprender a usar o protocolo TLS (Transport Layer Security) para proteger sua conexão com uma implantação do MongoDB .

Para se conectar a um sistema do MongoDB usando TLS, você deve executar as seguintes etapas:

  • Ative uma conexão TLS no Mongo::Client.

  • Especifique o certificado TLS do cliente.

  • Especifique o certificado da Autoridade de Certificação (CA) para verificar o certificado TLS do servidor.

Para saber como configurar seu sistema MongoDB para TLS, consulte o guia de configuração TLS no manual do MongoDB Server .

Observação

Esta página pressupõe conhecimento prévio de TLS/SSL e acesso a certificados válidos. Uma descrição completa de certificados TLS/SSL, PKI (Public Key Infrastructure) e CAs está além do escopo desta documentação. Para saber mais sobre o TLS, veja o Wikipedia sobre Transport Layer Security.

Você pode habilitar o TLS para a conexão com sua deployment do MongoDB das seguintes maneiras:

  • Defina a opção ssl como true em um novo objeto Mongo:Client.

  • Defina a opção tls como true em sua string de conexão.

Observação

convenção de nomenclatura SSL

Todas as versões do MongoDB Server suportadas pelo driver Ruby v2.6 e posteriores implementam somente TLS. 2.6 e não use SSL.

Por motivos históricos, o driver Ruby prefixa as opções TLS com ssl em vez de tls. A versão 3.0 e posterior do driver Ruby usarão o prefixo tls para nomes de opções Ruby.

Para configurar certificados, você deve especificar as seguintes opções:

  • ssl_cert: O arquivo de certificado usado para verificar a conexão com uma implementação do MongoDB .

  • ssl_key: O arquivo de chave privada usado para verificar a conexão com um sistema MongoDB .

  • ssl_ca_cert: O arquivo que contém os certificados CA concatenados usado para validar os certificados passados do sistema do MongoDB para o cliente. Se você não especificar um valor para esta opção, o driver utilizará o armazenamento de certificados raiz do sistema padrão como âncora de confiança.

No exemplo a seguir, o certificado TLS e a chave privada correspondente são fornecidos em arquivos separados:

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_cert: 'path/to/client.crt',
ssl_key: 'path/to/client.key',
ssl_ca_cert: 'path/to/ca.crt'
)

Você pode especificar o certificado TLS e a chave privada em um único arquivo, mas as opções de certificado e chave privada ainda devem ser especificadas. No exemplo a seguir, o certificado TLS e a chave privada são definidos no mesmo arquivo client.pem:

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_cert: 'path/to/client.pem',
ssl_key: 'path/to/client.pem',
ssl_ca_cert: 'path/to/ca.crt',
)

Para configurar certificados, você deve especificar as seguintes opções de URI:

  • tlsCertificateKeyFile: O arquivo que contém o certificado e o arquivo de chave usado para verificar a conexão com um sistema do MongoDB .

  • tlsCAFile: O arquivo que contém os certificados CA concatenados usado para validar os certificados passados do sistema do MongoDB para o cliente. Se você não especificar um valor para esta opção, o driver utilizará o armazenamento de certificados raiz do sistema padrão como âncora de confiança.

client = Mongo::Client.new(
"mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=path%2fto%2fclient.pem&tlsCAFile=path%2fto%2fca.crt")

O arquivo contendo o certificado e a chave geralmente tem uma extensão ''.crt'' ou .pem.

Os valores de opção de URI devem ser codificados por porcentagem. Isso se aplica, por exemplo, a barras (/) nos caminhos, que são codificados como %2f.

O driver Ruby oferece várias opções para você especificar o certificado TLS, a chave e o certificado CA com diferentes dados ou tipos de objeto .

Você pode fornecer uma das seguintes opções para especificar o certificado TLS:

Nome da opção
Tipo de dados/objeto aceito
Descrição

:ssl_cert

String

O caminho do arquivo de certificado usado para verificar a conexão com uma implementação do MongoDB .

:ssl_cert_object

OpenSSL::X509::Certificate

O objeto de certificado usado para verificar a conexão com um sistema do MongoDB .

:ssl_cert_string

String

Uma string contendo o certificado codificado em PEM usado para verificar a conexão com um sistema do MongoDB .

Você pode fornecer uma das seguintes opções para especificar a chave privada TLS:

Nome da opção
Tipo de dados/objeto aceito
Descrição

:ssl_key

String

O caminho do arquivo de chave privada usado para verificar a conexão com um sistema do MongoDB .

:ssl_key_object

OpenSSL::PKey

O objeto de chave privada usado para verificar a conexão com um MongoDB deployment.

:ssl_key_pass_phrase

String

Uma senha para a chave privada.

:ssl_key_string

String

Uma string contendo a chave privada codificada PEM usada para verificar a conexão com um sistema do MongoDB .

Você pode fornecer uma das seguintes opções para especificar o certificado TLS CA:

Nome da opção
Tipo de dados/objeto aceito
Descrição

:ssl_ca_cert

String

O caminho do arquivo contendo certificados de CA concatenados usados para validar os certificados passados do sistema do MongoDB para o cliente.

:ssl_ca_cert_object

Array<OpenSSL::X509::Certificate>

Uma array de objetos representando os certificados CA usados para validar os certificados passados do sistema do MongoDB para o cliente.

:ssl_ca_cert_string

String

Uma string contendo um certificado de CA codificado por PEM usado para validar certificados passados do sistema do MongoDB para o cliente.

Se sua configuração do TLS exigir personalização, você poderá definir ganchos de contexto do TLS adicionando um objeto Ruby nativo Proc à array Mongo.tls_context_hooks. Adicione o objeto Proc à array antes de criar quaisquer instâncias do Mongo::Client.

O seguinte exemplo de código habilita a cifra AES256-SHA como a única cifra a ser usada para TLS:

Mongo.tls_context_hooks.push(
Proc.new { |context|
context.ciphers = ["AES256-SHA"]
}
)

As opções de contexto TLS do driver Ruby são baseadas no tratamento nativo de SSL pelo Ruby. Para saber mais sobre as opções de contexto TLS disponíveis, consulte a documentação Ruby para SSLContext.

Se o certificado fornecido pelo servidor contiver um URI de ponto de extremidade OCSP, o driver emitirá uma solicitação de Protocolo de Status do Certificado Online (OCSP) para o ponto de extremidade especificado por padrão para verificar a validade do certificado.

Para desabilitar a verificação de ponto de extremidade do OCSP, defina a opção :ssl_verify_ocsp_endpoint Ruby como false ou defina a opção tlsDisableOCSPEndpointCheck URI como true ao criar um cliente.

Observação

JRuby não suporta verificação OCSP

Como o JRuby não expõe corretamente os URIs de endpoint OCSP, o driver não verifica os endpoints OCSP quando o aplicação subjacente é executado no JRuby.

Quando o TLS está habilitado, o driver Ruby verifica automaticamente o certificado apresentado pelo servidor . Ao testar seu código, você pode desativar essa verificação. Isso é conhecido como TLS inseguro.

Quando o TLS inseguro está ativado, o driver exige apenas que o servidor apresente um certificado X.509 . O driver aceita um certificado mesmo que alguma das seguintes afirmações seja verdadeira:

  • O nome do host do servidor e o nome do assunto (ou nome alternativo do assunto) no certificado não correspondem.

  • O certificado expirou ou ainda não é válido.

  • O certificado não tem um certificado raiz confiável na cadeia.

  • A finalidade do certificado não é válida para identificação do servidor.

Observação

Mesmo quando o TLS inseguro está habilitado, a comunicação entre o cliente e o servidor é criptografada com TLS.

Para habilitar o TLS inseguro, defina a opção sslVerify do cliente ou a opção tlsInsecure URI como true:

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_verify: false
)
client = Mongo::Client.new('mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true')

Da mesma forma, você pode definir as seguintes opções para desabilitar a verificação do certificado ou do nome do host:

  • ssl_verify_certificate: Desative a validação do certificado definindo a opção como false.

  • ssl_verify_hostname: Desative a verificação do nome do host definindo a opção false.

  • tlsAllowInvalidCertificates: Desative a validação do certificado definindo a opção como true.

  • tlsAllowInvalidHostnames: Desative a validação do nome de host definindo a opção como true.

Aviso

Não use TLS inseguro na produção

Sempre desative o TLS inseguro na produção.

Habilitar o TLS inseguro em um ambiente de produção torna seu aplicação inseguro e potencialmente vulnerável a certificados expirados e processos externos que se apresentam como instâncias de cliente válidas.

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

Voltar

Opções de conexão

Nesta página