Die Java-Clientbibliothek für Spanner funktioniert mit Spanner Omni genauso wie mit Spanner. In diesem Dokument wird beschrieben, wie Sie sichere Verbindungen zu Spanner Omni herstellen, indem Sie die Java-Clientbibliothek konfigurieren. Sie stellen diese Verbindungen her, indem Sie Clientoptionen festlegen, wenn Sie einen Datenbank-Administratorklienten oder einen Datenbankclient erstellen.
Die Java-Clientbibliothek unterstützt Verbindungen im Nur-Text-Modus, TLS-, TLS-mit-Anmeldedaten- und mTLS-Verbindungen.
Weitere Informationen finden Sie in der Spanner-Dokumentation unter Erste Schritte mit Spanner in Java.
Hinweis
Wenn Sie mit Spanner Omni in Java beginnen möchten, verwenden Sie die Java-Clientbibliothek in Version 6.119.0 oder höher.
Wenn Sie Maven ohne die Materialliste (Bill of Materials, BOM) verwenden, fügen Sie den Abhängigkeiten der Datei pom.xml Folgendes hinzu:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner</artifactId>
<version>6.119.0</version>
</dependency>
Sicherheitskonfigurationen
Die Spanner-Java-Clientbibliothek unterstützt vier Sicherheitskonfigurationen, die definieren, wie die Kommunikation zwischen dem Client und Spanner Omni verschlüsselt und authentifiziert wird. In der folgenden Tabelle werden die einzelnen Konfigurationen beschrieben:
| Sicherheitskonfiguration | Beschreibung |
|---|---|
| Nur-Text | Die Kommunikation ist nicht verschlüsselt. |
| TLS | Die Kommunikation wird mit Transport Layer Security (TLS) verschlüsselt. Bei dieser Konfiguration müssen Sie das Spanner Omni CA-Zertifikat dem Java-Truststore hinzufügen, wie unter Java-Truststore konfigurieren beschrieben. |
| TLS mit Anmeldedaten | Die Kommunikation wird mit TLS verschlüsselt und die Authentifizierung erfolgt mit einem Nutzernamen und einem Passwort. |
| mTLS | Die Kommunikation wird mit gegenseitigem TLS (mTLS) verschlüsselt. Für diese Konfiguration müssen Sie sowohl ein Clientzertifikat als auch einen privaten Clientschlüssel angeben. |
Java-Truststore konfigurieren
Für alle verschlüsselten Verbindungstypen (TLS, TLS mit Anmeldedaten und mTLS) müssen Sie das Spanner Omni CA-Zertifikat dem Java-Truststore hinzufügen, damit der Client das Zertifikat des Servers prüfen kann.
Führen Sie den folgenden Befehl aus, um das CA-Zertifikat dem Standard-Java-Truststore hinzuzufügen:
sudo keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts
Alternativ können Sie beim Ausführen der Anwendung einen benutzerdefinierten Truststore angeben:
Um die Kompatibilität mit anderen Diensten aufrechtzuerhalten, die Standardzertifizierungsstellen verwenden, kopieren Sie den Standard-Java-Truststore:
cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTSImportieren Sie das CA-Zertifikat in Ihren benutzerdefinierten Truststore:
keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTSGeben Sie den benutzerdefinierten Truststore mit JVM-Systemattributen an, wenn Sie die Anwendung ausführen:
java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
SpannerOptions-Objekt konfigurieren
Wenn Sie das Objekt SpannerOptions konfigurieren, um ein DatabaseClient oder DatabaseAdminClient zu erstellen, geben Sie den Spanner Omni-Endpunkt mit setHost() gefolgt von setType(SpannerOptions.InstanceType.OMNI) an.
Die folgenden Beispiele zeigen, wie das SpannerOptions-Objekt für jede unterstützte Sicherheitskonfiguration konfiguriert wird:
Nur-Text
Wenn Sie eine Nur-Text-Verbindung herstellen möchten, geben Sie den Spanner Omni-Endpunkt mit http:// an und verwenden Sie die Methode 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
Wenn Sie das SpannerOptions-Objekt für eine TLS-Verbindung konfigurieren, müssen Sie keine Anmeldedaten für Nutzername und Passwort angeben. Geben Sie den Spanner Omni-Endpunkt mit https:// an:
SpannerOptions options =
SpannerOptions.newBuilder()
.setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
.setType(SpannerOptions.InstanceType.OMNI)
.build();
Spanner spanner = options.getService();
TLS mit Anmeldedaten
Wenn Sie eine TLS-Verbindung mit Nutzername und Passwortauthentifizierung herstellen möchten, geben Sie den Spanner Omni-Endpunkt mit https:// und den Nutzernamen und das Passwort mit der Methode login() an:
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
Wenn Sie eine mTLS-Verbindung verwenden möchten, konvertieren Sie den von Spanner Omni generierten Schlüssel mit dem folgenden Befehl in ein mit Java kompatibles Format:
openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt
Das folgende Beispiel zeigt, wie das SpannerOptions-Objekt für die Verwendung eines Clientzertifikats konfiguriert wird:
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();
Datenbankclient abrufen
Nachdem Sie das SpannerOptions-Objekt konfiguriert haben, können Sie einen Datenbankclient abrufen.
Da für Spanner Omni keine Google Cloud-Projekt- oder Instanz-IDs verwendet werden, geben Sie beim Erstellen einer DatabaseId default für die Projekt-ID und die Instanz-ID an:
DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);