Compartir a través de


Actualización de certificados TLS de cliente para clientes de aplicaciones con Azure Database for PostgreSQL: servidor flexible

SE APLICA A: Azure Database for PostgreSQL con servidor flexible

Importación de certificados de entidad de certificación raíz en el almacén de claves de Java en el cliente para escenarios de anclaje de certificados

Las aplicaciones Java personalizadas usan un almacén de claves predeterminado, denominado cacerts, que contiene certificados de entidad de certificación (CA) de confianza. También se conoce a menudo como almacén de confianza de Java. Un archivo de certificados denominado cacerts reside en el directorio de propiedades de seguridad, java.home\lib\security, donde java.home es el directorio del entorno en tiempo de ejecución (el directorio jre en el SDK o el directorio de nivel superior del entorno en tiempo de ejecución de Java™ 2). Puede usar las siguientes instrucciones para actualizar los certificados de entidad de certificación raíz del cliente para escenarios de anclaje de certificados de cliente con el servidor flexible de PostgreSQL:

  1. Compruebe cacerts almacén de claves de Java para ver si ya contiene certificados necesarios. Puede enumerar certificados en el almacén de claves de Java mediante el comando siguiente:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Si los certificados necesarios no están presentes en el almacén de claves java en el cliente, como se puede comprobar en la salida, debe continuar con las siguientes instrucciones:

  1. Realice una copia de seguridad del almacén de claves personalizado.

  2. Descargue los certificados y guárdelos en un lugar donde pueda consultarlos.

  3. Genere un almacén de certificados de CA combinado con todos los certificados de CA raíz necesarios incluidos. En el ejemplo siguiente se muestra el uso de DefaultJavaSSLFactory para usuarios JDBC de 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. Reemplace el archivo de almacén de claves original por el nuevo generado:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Reemplace el archivo PEM de la CA raíz original por el archivo de CA raíz combinado y reinicie la aplicación o el cliente.

Para obtener más información sobre cómo configurar certificados de cliente con el controlador JDBC de PostgreSQL, consulte esta documentación.

Nota:

Para importar certificados a almacenes de certificados de cliente, es posible que tenga que convertir archivos .crt de certificado en formato .pem. Puede utilizar la utilidad OpenSSL para realizar estas conversiones de archivos.

Obtener una lista de certificados de confianza en el Almacén de claves de Java mediante programación

Como se indicó anteriormente, de forma predeterminada, Java almacena los certificados de confianza en un archivo especial denominado cacerts que se encuentra dentro de la carpeta de instalación de Java en el cliente. En primer lugar, el ejemplo siguiente lee cacerts y lo carga en el 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;
}

La contraseña predeterminada de cacerts es changeit, pero debe ser diferente en el cliente real, ya que los administradores recomiendan cambiar la contraseña inmediatamente después de la instalación de Java. Una vez cargado el objeto KeyStore, podemos usar la clase PKIXParameters para leer los 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());
}

Actualización de certificados de entidad de certificación raíz al usar clientes en Azure App Services con Azure Database for PostgreSQL: servidor flexible para escenarios de anclaje de certificados

En el caso de los servicios de aplicaciones de Azure que se conectan a Azure Database for PostgreSQL, podemos tener dos escenarios posibles de actualización de certificados de cliente y depende de cómo se use SSL con la aplicación implementada en Azure App Services.

  • Los nuevos certificados se agregan a App Service a nivel de plataforma antes de los cambios en Azure Database for PostgreSQL - Servidor flexible. Si usa en la aplicación los certificados SSL incluidos en la plataforma de App Service, no es necesario realizar ninguna acción. Consulte la siguiente documentación de Azure App Service para obtener más información.
  • Si va a incluir explícitamente la ruta de acceso al archivo de certificado SSL en el código, debería descargar el nuevo certificado y actualizar el código para usar el nuevo certificado. Un buen ejemplo de este escenario es cuando se usan contenedores personalizados de App Service como compartidos en la documentación de App Service.

Actualización de certificados de entidad de certificación raíz al usar clientes en Azure Kubernetes Service (AKS) con Azure Database for PostgreSQL: servidor flexible para escenarios de anclaje de certificados

Si está intentando conectarse a Azure Database for PostgreSQL con aplicaciones hospedadas en Azure Kubernetes Services (AKS) y anclar certificados, es similar a acceder desde un entorno de host de clientes dedicados. Consulte los pasos aquí.

Actualización de certificados de entidad de certificación raíz para usuarios de .NET (Npgsql) en Windows con Azure Database for PostgreSQL: servidor flexible para escenarios de anclaje de certificados

Para los usuarios de .NET (Npgsql) en Windows, que se conectan a Azure Database for PostgreSQL - Servidor flexible, asegúrese de que las tres Microsoft RSA Root Certificate Authority 2017, DigiCert Global Root G2, así como Digicert Global Root CA existen en Windows Certificate Store, Entidades de certificación raíz de confianza. Si no existe alguno de los certificados, importe el certificado que falta.

Actualización de certificados de entidad de certificación raíz para otros clientes en escenarios de anclaje de certificados

En el caso de otros usuarios de cliente de PostgreSQL, se pueden fusionar dos archivos de certificado de entidad de certificación con el formato siguiente.

-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----

Comparta sugerencias y errores con el equipo de producto de Azure Database for PostgreSQL.