Atualizar certificados TLS do 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 AC raiz no Repositório de Chaves Java no cliente para cenários de fixação de certificado
Os aplicativos Java gravados de forma personalizada usam um repositório de chaves padrão, chamado cacerts, que contém certificados de autoridade de certificação (AC) confiáveis. Também é conhecido como repositório confiável Java. Um arquivo de certificados chamado cacerts reside no diretório de propriedades de segurança, java.home\lib\security, em que java.home é o diretório de ambiente de runtime (o diretório jre no SDK ou no diretório de nível superior do Ambiente de Runtime do Java™ 2). Você pode usar as seguintes instruções para atualizar certificados de AC raiz do cliente para cenários de fixação de certificado do cliente com o Servidor Flexível do PostgreSQL:
- Verifique o repositório de chaves Java cacerts para ver se ele já contém os certificados necessários. Você pode listar os certificados no repositório de chaves Java usando o seguinte comando:
keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt
Se os certificados necessários não estiverem presentes no repositório de chaves Java no cliente, como pode ser verificado na saída, você deverá prosseguir com as seguintes instruções:
Faça uma cópia de backup do repositório de chaves personalizado.
Baixe certificados e salve-os localmente onde você possa consultá-los.
Gere um repositório de certificados de AC combinado com todos os certificados de AC raiz necessários incluídos. O exemplo abaixo mostra o uso do DefaultJavaSSLFactory para usuários JDBC do 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
Substitua o arquivo de repositório de chaves original pelo novo gerado:
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file"); System.setProperty("javax.net.ssl.trustStorePassword","password");
Substitua o arquivo pem da AC raiz original pelo arquivo de AC raiz combinada e reinicie o aplicativo/cliente.
Para obter mais informações sobre como configurar certificados de cliente com o driver JDBC do PostgreSQL, consulte esta documentação.
Observação
Para importar certificados para os repositórios de certificados do cliente, talvez seja necessário converter os arquivos .crt do certificado para o formato .pem. Você pode usar o utilitário OpenSSL para fazer essas conversões de arquivo.
Obter programaticamente a lista de certificados confiáveis no Repositório de Chaves Java
Conforme indicado 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 Java no cliente. O exemplo abaixo lê primeiro cacerts e o carrega 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 AC 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 certificado
Para os Serviços de Aplicativo do Azure que se conectam ao Banco de Dados do Azure para PostgreSQL, há dois cenários possíveis e dependem de como você está usando SSL com o 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 estiver usando os certificados SSL incluídos na plataforma do Serviço de Aplicativo no aplicativo, nenhuma ação será necessária. Consulte a documentação do Serviço de Aplicativo do Azurea seguir para obter mais informações.
- Se você estiver incluindo explicitamente o caminho para o arquivo de certificado SSL em seu código, será necessário 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 AC raiz ao usar clientes no AKS (Serviço de Kubernetes do Azure) com o Banco de Dados do Azure para PostgreSQL – Servidor Flexível para cenários de fixação de certificado
Se você estiver tentando se conectar ao Banco de Dados do Azure para PostgreSQL usando aplicativos hospedados no AKS (Serviços de Kubernetes do Azure) e fixando certificados, será semelhante ao acesso de um ambiente de host de clientes dedicados. Consulte as etapas aqui.
Atualização de certificados de AC raiz para usuários do .NET (Npgsql) no Windows com o Banco de Dados do Azure para PostgreSQL – Servidor Flexível para cenários de fixação de certificado
Para usuários do .NET (Npgsql) no Windows, conectando-se ao Banco de Dados do Azure para PostgreSQL – Servidores Flexíveis, verifique se todas as três Autoridade de Certificação Raiz do Microsoft RSA 2017, DigiCert Global Root G2, bem como a Digicert Global Root CA existem no Repositório de Certificados do Windows, Autoridades de Certificação Raiz Confiáveis. Se algum certificado não existir, importe o certificado ausente.
Atualização de certificados de AC raiz para outros clientes para cenários de fixação de certificado
Para outros usuários clientes do PostgreSQL, é possível 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-----