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 amministrativo del database o un client di database.
La libreria client Java supporta connessioni in testo non crittografato, TLS, TLS con credenziali e mTLS.
Per saperne di più, consulta la sezione Introduzione 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 il modo in cui la comunicazione viene criptata e autenticata 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 Spanner Omni al truststore Java, come descritto in Configurare il truststore Java. |
| TLS con credenziali | La comunicazione viene criptata utilizzando TLS e l'autenticazione viene eseguita utilizzando un nome utente e una password. |
| mTLS | La comunicazione viene criptata utilizzando mutual TLS (mTLS). Questa configurazione richiede di fornire sia un certificato client sia una chiave privata del client. |
Configura il truststore Java
Per tutti i tipi di connessione crittografata (TLS, TLS con credenziali e mTLS), devi aggiungere il certificato CA Spanner Omni all'archivio attendibilità Java in modo che il client possa verificare il certificato del server.
Per aggiungere il certificato CA al truststore Java predefinito, esegui questo comando:
sudo keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts
In alternativa, puoi specificare un truststore personalizzato quando esegui l'applicazione:
Per mantenere la compatibilità con altri servizi che utilizzano 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 attendibilità 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 JVM quando esegui l'applicazione:
java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
Configura l'oggetto SpannerOptions
Quando configuri l'oggetto
SpannerOptions
per creare un
DatabaseClient o
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 normale, 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 di 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 seguente comando:
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();
Ottenere un client di database
Dopo aver configurato l'oggetto SpannerOptions, puoi ottenere un client di database.
Poiché Spanner Omni non utilizza ID progetto o istanza 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);