La biblioteca cliente de Java para Spanner funciona con Spanner Omni de la misma manera que con Spanner. En este documento, se muestra cómo establecer conexiones seguras a Spanner Omni mediante la configuración de la biblioteca cliente de Java. Para establecer estas conexiones, debes configurar las opciones del cliente cuando creas un cliente administrativo de base de datos o un cliente de base de datos.
La biblioteca cliente de Java admite texto sin formato, TLS, TLS con credenciales y conexiones mTLS.
Para obtener más información, consulta Comienza a usar Spanner en Java en la documentación de Spanner.
Antes de comenzar
Para comenzar a usar Spanner Omni en Java, usa la biblioteca cliente de Java versión 6.119.0 o posterior.
Si usas Maven sin la lista de materiales (BOM), agrega lo siguiente a las dependencias del archivo pom.xml:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner</artifactId>
<version>6.119.0</version>
</dependency>
Parámetros de configuración de seguridad
La biblioteca cliente de Java de Spanner admite cuatro parámetros de configuración de seguridad, que definen cómo se encripta y autentica la comunicación entre el cliente y Spanner Omni. En la siguiente tabla, se describe cada configuración:
| Configuración de seguridad | Descripción |
|---|---|
| Texto sin formato | La comunicación no está encriptada. |
| TLS | La comunicación se encripta con la seguridad de la capa de transporte (TLS). Esta configuración requiere que agregues el certificado de la AC de Spanner Omni al almacén de certificados de confianza de Java, como se describe en Configura el almacén de certificados de confianza de Java. |
| TLS con credenciales | La comunicación se encripta con TLS y la autenticación se realiza con un nombre de usuario y una contraseña. |
| mTLS | La comunicación se encripta con TLS mutua (mTLS). Esta configuración requiere que proporciones un certificado de cliente y una clave privada de cliente. |
Configura el almacén de confianza de Java
Para todos los tipos de conexión encriptada (TLS, TLS con credenciales y mTLS), debes agregar el certificado de la AC de Spanner Omni al almacén de certificados de confianza de Java para que el cliente pueda verificar el certificado del servidor.
Para agregar el certificado de CA al almacén de confianza predeterminado de Java, ejecuta el siguiente comando:
sudo keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts
Como alternativa, puedes especificar un almacén de confianza personalizado cuando ejecutas la aplicación:
Para mantener la compatibilidad con otros servicios que usan autoridades certificadoras (AC) estándar, copia el almacén de certificados de confianza predeterminado de Java:
cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTSImporta el certificado de CA a tu almacén de confianza personalizado:
keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTSEspecifica el almacén de confianza personalizado con las propiedades del sistema de la JVM cuando ejecutes la aplicación:
java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
Configura el objeto SpannerOptions
Cuando configures el
SpannerOptions
objeto para crear un
DatabaseClient o
DatabaseAdminClient,
especifica el extremo de Spanner Omni con setHost() seguido de setType(SpannerOptions.InstanceType.OMNI).
En los siguientes ejemplos, se muestra cómo configurar el objeto SpannerOptions para cada configuración de seguridad admitida:
Texto sin formato
Para establecer una conexión de texto sin formato, especifica el extremo de Spanner Omni con http:// y usa el método usePlainText():
SpannerOptions options =
SpannerOptions.newBuilder()
.setHost("http://ENDPOINT") // Replace with your Spanner Omni endpoint
.setType(SpannerOptions.InstanceType.OMNI)
.usePlainText()
.build();
Spanner spanner = options.getService();
TLS
Cuando configuras el objeto SpannerOptions para una conexión TLS, no necesitas especificar credenciales de nombre de usuario y contraseña. Especifica el extremo de Spanner Omni con https://:
SpannerOptions options =
SpannerOptions.newBuilder()
.setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
.setType(SpannerOptions.InstanceType.OMNI)
.build();
Spanner spanner = options.getService();
TLS con credenciales
Para establecer una conexión TLS con autenticación de nombre de usuario y contraseña, especifica el extremo de Spanner Omni con https:// y el nombre de usuario y la contraseña con el método login():
SpannerOptions options =
SpannerOptions.newBuilder()
.setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
.setType(SpannerOptions.InstanceType.OMNI)
.login("USERNAME", "PASSWORD".toCharArray())
.build();
Spanner spanner = options.getService();
mTLS
Para usar una conexión mTLS, convierte la clave generada por Spanner Omni a un formato compatible con Java con el siguiente comando:
openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt
En el siguiente ejemplo, se muestra cómo configurar el objeto SpannerOptions para usar un certificado de cliente:
SpannerOptions options =
SpannerOptions.newBuilder()
.setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
.setType(SpannerOptions.InstanceType.OMNI)
.useClientCert(
"PATH_TO_CLIENT_CERT",
"PATH_TO_CLIENT_CERT_KEY")
.build();
Spanner spanner = options.getService();
Obtén un cliente de base de datos
Después de configurar el objeto SpannerOptions, puedes obtener un cliente de base de datos.
Como Spanner Omni no usa IDs de instancia ni de proyecto de Google Cloud, especifica default para el ID del proyecto y el ID de instancia cuando crees un DatabaseId:
DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);