La libreria client Java per Spanner funziona con Spanner Omni allo stesso modo di Spanner. Questo documento mostra come stabilire connessioni sicure a Spanner Omni configurando la libreria client Java. Queste connessioni vengono stabilite impostando le opzioni client quando crei un client di amministrazione del database o un client di database.
La libreria client Java supporta connessioni in testo non crittografato, TLS, TLS con credenziali e mTLS.
Per ulteriori informazioni, consulta la guida introduttiva a Spanner in Java nella documentazione di Spanner.
Prima di iniziare
Per iniziare a utilizzare Spanner Omni in Java, utilizza la libreria client Java versione 6.119.0 o successive.
Se utilizzi Maven senza la distinta base (BOM), aggiungi quanto segue alle dipendenze del file pom.xml:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner</artifactId>
<version>6.119.0</version>
</dependency>
Configurazioni di sicurezza
La libreria client Java di Spanner supporta quattro configurazioni di sicurezza, che definiscono la modalità di crittografia e autenticazione della comunicazione tra il client e Spanner Omni. La tabella seguente descrive ogni configurazione:
| Configurazione di sicurezza | Descrizione |
|---|---|
| Testo normale | La comunicazione non è criptata. |
| TLS | La comunicazione è criptata utilizzando Transport Layer Security (TLS). Questa configurazione richiede l'aggiunta del certificato CA di Spanner Omni all'archivio attendibile Java, come descritto in Configurare l'archivio attendibile Java. |
| TLS con credenziali | La comunicazione è criptata utilizzando TLS e l'autenticazione viene eseguita utilizzando un nome utente e una password. |
| mTLS | La comunicazione è criptata utilizzando mutual TLS (mTLS). Questa configurazione richiede di fornire sia un certificato client sia una chiave privata client. |
Configurare l'archivio attendibile Java
Per tutti i tipi di connessione criptata (TLS, TLS con credenziali e mTLS), devi aggiungere il certificato CA di Spanner Omni all'archivio attendibile Java in modo che il client possa verificare il certificato del server.
Per aggiungere il certificato CA all'archivio attendibile Java predefinito, esegui il comando seguente:
sudo keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts
In alternativa, puoi specificare un archivio attendibile personalizzato quando esegui l'applicazione:
Per mantenere la compatibilità con altri servizi che utilizzano le autorità di certificazione (CA) standard, copia l'archivio attendibile Java predefinito:
cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTSImporta il certificato CA nell'archivio attendibile personalizzato:
keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTSSpecifica l'archivio attendibile personalizzato utilizzando le proprietà di sistema della JVM quando esegui l'applicazione:
java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
Configurare l'oggetto SpannerOptions
Quando configuri l'
SpannerOptions
oggetto per creare un
DatabaseClient o un
DatabaseAdminClient,
specifica l'endpoint Spanner Omni utilizzando setHost() seguito da setType(SpannerOptions.InstanceType.OMNI).
Gli esempi seguenti mostrano come configurare l'oggetto SpannerOptions per ogni configurazione di sicurezza supportata:
Testo normale
Per stabilire una connessione in testo non crittografato, specifica l'endpoint Spanner Omni con http:// e utilizza il metodo 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
Quando configuri l'oggetto SpannerOptions per una connessione TLS, non devi specificare le credenziali di nome utente e password. Specifica l'endpoint Spanner Omni utilizzando 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 credenziali
Per stabilire una connessione TLS con l'autenticazione tramite nome utente e password, specifica l'endpoint Spanner Omni utilizzando https:// e il nome utente e la password utilizzando il metodo 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
Per utilizzare una connessione mTLS, converti la chiave generata da Spanner Omni in un formato compatibile con Java utilizzando il comando seguente:
openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt
L'esempio seguente mostra come configurare l'oggetto SpannerOptions per utilizzare un certificato client:
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();
Recuperare un client di database
Dopo aver configurato l'oggetto SpannerOptions, puoi recuperare un client di database.
Poiché Spanner Omni non utilizza gli ID progetto cloud o istanza di Google Cloud, specifica default per l'ID progetto e l'ID istanza quando crei un DatabaseId:
DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);