Actualización de certificados de cliente de aplicación en Azure HorizonDB (versión preliminar)

Al conectar aplicaciones a Azure HorizonDB, el cliente de la aplicación debe instalar certificados raíz de confianza. Las secciones siguientes le guían a través de la actualización de los certificados raíz de confianza para las aplicaciones, que es un escenario común para las aplicaciones que se conectan a una instancia de Azure HorizonDB.

Importe los certificados de la autoridad de certificación raíz en el almacén de claves de Java del cliente, para escenarios de fijación de certificados

Las aplicaciones Java escritas 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 del SDK o el directorio de nivel superior del entorno en tiempo de ejecución de Java™ 2). Puede usar las siguientes indicaciones para actualizar los certificados de entidad de certificación raíz del cliente para escenarios de asignación de certificados de cliente con PostgreSQL:

  1. Compruebe el almacén de claves de Java cacerts para ver si ya contiene los certificados necesarios. Puede enumerar certificados en Java almacén de claves mediante el comando siguiente:

      keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt
    

    Si los certificados necesarios no se encuentran en el almacén de claves de Java del cliente, como puede comprobar en la salida, siga las instrucciones que se indican a continuación:

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

  3. Descargue los certificados y guárdelos localmente donde puede hacer referencia a ellos.

  4. 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
    
  5. 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");
    
  6. 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.

    Note

    Para importar certificados a almacenes de certificados de cliente, es posible que tenga que convertir archivos .crt de certificado en formato .pem. Puede usar Transport Layer Security (TLS) en Azure HorizonDB (versión preliminar).

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

De manera 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. El ejemplo siguiente lee cacerts primero 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 para 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());
}

Actualice los certificados de la autoridad de certificación raíz cuando utilice clientes en App de Azure Services, para escenarios de fijación de certificados

Para App de Azure Services, al conectar con una instancia de Azure HorizonDB, pueden darse dos escenarios posibles al actualizar los certificados de cliente, y esto depende de cómo se esté usando SSL con la aplicación desplegada en App de Azure Services.

Actualice los certificados de la autoridad de certificación raíz cuando utilice clientes en Azure Kubernetes Service (AKS), para escenarios de fijación de certificados

Si intenta conectarse al Azure HorizonDB mediante aplicaciones hospedadas en Azure Kubernetes Services (AKS) y anclar certificados, es similar al acceso desde el entorno host de un cliente dedicado. Consulte los pasos aquí.

Actualizar los certificados de las autoridades de certificación raíz para los usuarios de .NET (Npgsql) en Windows, para escenarios de fijación de certificados

Para los usuarios de .NET (Npgsql) en Windows que se conecten a Azure HorizonDB, asegúrese de que los tres certificados —Microsoft RSA Root Certificate Authority 2017, DigiCert Global Root G2 y DigiCert Global Root CA— estén presentes en el almacén de certificados de Windows, en la sección Autoridades de certificación raíz de confianza. Si no existe alguno de los certificados, importe el certificado que falta.

Actualizar los certificados de las autoridades de certificación raíz para otros clientes, en escenarios de fijación de certificados

Para otros usuarios cliente de PostgreSQL, puede combinar 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-----