La biblioteca cliente de Java para Spanner funciona con Spanner Omni de la misma manera que lo hace con Spanner. En este documento, se muestra cómo establecer conexiones seguras con Spanner Omni configurando la biblioteca cliente de Java. Para establecer estas conexiones, debes configurar las opciones del cliente cuando creas un cliente administrativo de la base de datos o un cliente de la base de datos.
La biblioteca cliente de Java admite conexiones de texto sin formato, TLS, TLS con credenciales y 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 versión 6.119.0 o posterior de la biblioteca cliente de Java.
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 configuraciones 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 CA de Omni de Spanner al almacén de confianza de Java, como se describe en Configura el almacén 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 del 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 la AC al almacén de certificados 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 ejecutes 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 objeto SpannerOptions para crear un objeto 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 es necesario que especifiques 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 que generó 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 proyectos ni de instancias de Google Cloud, especifica default para el ID del proyecto y el ID de la instancia cuando crees un DatabaseId:
DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);