Atualizar certificados TLS de cliente para clientes de aplicativo com o Banco de Dados do Azure para PostgreSQL - Servidor flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

Importar certificados de CA raiz no Java Key Store no cliente para cenários de fixação de certificados

Aplicativos Java personalizados usam um keystore padrão, chamado cacerts, que contém certificados de autoridade de certificação (CA) confiáveis. Também é frequentemente conhecido como armazenamento confiável Java. Um arquivo de certificados chamado cacerts reside no diretório de propriedades de segurança, java.home\lib\security, onde java.home é o diretório do ambiente de tempo de execução (o diretório jre no SDK ou o diretório de nível superior do Java™ 2 Runtime Environment). Você pode usar as seguintes instruções para atualizar certificados de CA raiz do cliente para cenários de fixação de certificados de cliente com o PostgreSQL Flexible Server:

  1. Verifique cacerts java keystore para ver se ele já contém certificados necessários. Você pode listar certificados no keystore Java usando o seguinte comando:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Se os certificados necessários não estiverem presentes no armazenamento de chaves java no cliente, como pode ser verificado na saída, você deve prosseguir com as seguintes instruções:

  1. Faça uma cópia de backup do seu keystore personalizado.

  2. Faça o download de certificados e salve-os localmente onde você pode consultá-los.

  3. Gere um armazenamento de certificados de CA combinado com todos os certificados de CA raiz necessários incluídos. O exemplo abaixo mostra o uso de DefaultJavaSSLFactory para usuários JDBC PostgreSQL.

    
    
        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootG2.crt.pem   -keystore truststore -storepass password -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert2  -file "D:\ Microsoft ECC Root Certificate Authority 2017.crt.pem" -keystore truststore -storepass password  -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootCA.crt.pem   -keystore truststore -storepass password -noprompt
    
  4. Substitua o arquivo keystore original pelo novo arquivo gerado:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Substitua o arquivo pem da autoridade de certificação raiz original pelo arquivo de autoridade de certificação raiz combinada e reinicie o aplicativo/cliente.

Para obter mais informações sobre como configurar certificados de cliente com o driver JDBC PostgreSQL, consulte esta documentação.

Nota

Para importar certificados para repositórios de certificados de cliente, talvez seja necessário converter arquivos .crt de certificado para o formato .pem. Você pode usar o utilitário OpenSSL para fazer essas conversões de arquivo.

Obter lista de certificados confiáveis no Java Key Store programaticamente

Como dito acima, o Java, por padrão, armazena os certificados confiáveis em um arquivo especial chamado cacerts que está localizado dentro da pasta de instalação do Java no cliente. O exemplo abaixo primeiro lê cacerts e carrega-o no objeto KeyStore:

private KeyStore loadKeyStore() {
    String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator);
    String filename = System.getProperty("java.home") + relativeCacertsPath;
    FileInputStream is = new FileInputStream(filename);
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    String password = "changeit";
    keystore.load(is, password.toCharArray());

    return keystore;
}

A senha padrão para cacerts é changeit , mas deve ser diferente no cliente real, pois os administradores recomendam alterar a senha imediatamente após a instalação do Java. Depois de carregarmos o objeto KeyStore, podemos usar a classe PKIXParameters para ler os certificados presentes.

public void whenLoadingCacertsKeyStore_thenCertificatesArePresent() {
    KeyStore keyStore = loadKeyStore();
    PKIXParameters params = new PKIXParameters(keyStore);
    Set<TrustAnchor> trustAnchors = params.getTrustAnchors();
    List<Certificate> certificates = trustAnchors.stream()
      .map(TrustAnchor::getTrustedCert)
      .collect(Collectors.toList());

    assertFalse(certificates.isEmpty());
}

Atualizar certificados de CA raiz ao usar clientes nos Serviços de Aplicativo do Azure com o Banco de Dados do Azure para PostgreSQL - Servidor flexível para cenários de fixação de certificados

Para os serviços de Aplicativo do Azure, conectando-se ao Banco de Dados do Azure para PostgreSQL, podemos ter dois cenários possíveis na atualização de certificados de cliente e isso depende de como você está usando SSL com seu aplicativo implantado nos Serviços de Aplicativo do Azure.

  • Novos certificados são adicionados ao Serviço de Aplicativo no nível da plataforma antes das alterações no Banco de Dados do Azure para PostgreSQL - Servidor Flexível. Se você estiver usando os certificados SSL incluídos na plataforma do Serviço de Aplicativo em seu aplicativo, nenhuma ação será necessária. Consulte a seguinte documentação do Serviço de Aplicativo do Azure para obter mais informações.
  • Se você estiver incluindo explicitamente o caminho para o arquivo de certificado SSL em seu código, precisará baixar o novo certificado e atualizar o código para usar o novo certificado. Um bom exemplo desse cenário é quando você usa contêineres personalizados no Serviço de Aplicativo conforme compartilhado na documentação do Serviço de Aplicativo

Atualizar certificados de CA raiz ao usar clientes no Serviço Kubernetes do Azure (AKS) com o Banco de Dados do Azure para PostgreSQL - Servidor flexível para cenários de fixação de certificados

Se você estiver tentando se conectar ao Banco de Dados do Azure para PostgreSQL usando aplicativos hospedados nos Serviços Kubernetes do Azure (AKS) e fixar certificados, é semelhante ao acesso de um ambiente de host de clientes dedicado. Consulte as etapas aqui.

Atualizando certificados de CA raiz para usuários .NET (Npgsql) no Windows com o Banco de Dados do Azure para PostgreSQL - Servidor flexível para cenários de fixação de certificados

Para usuários .NET (Npgsql) no Windows, conectando-se ao Banco de Dados do Azure para PostgreSQL - Servidores Flexíveis, certifique-se de que todas as três Microsoft RSA Root Certificate Authority 2017, DigiCert Global Root G2, bem como Digicert Global Root CA existem no Windows Certificate Store, Trusted Root Certification Authorities. Se não existirem certificados, importe o certificado em falta.

Atualizando certificados de CA raiz para outros clientes para cenários de fixação de certificados

Para outros usuários do cliente PostgreSQL, você pode mesclar dois arquivos de certificado de CA como este formato abaixo.



-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----
  • Saiba como criar uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL usando a opção Acesso privado (integração VNet) no portal do Azure ou na CLI do Azure.
  • Saiba como criar uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL usando a opção Acesso público (endereços IP permitidos) no portal do Azure ou na CLI do Azure.