A biblioteca de cliente Java para Spanner funciona com o Spanner Omni da mesma forma que funciona com o Spanner. Este documento mostra como estabelecer conexões seguras com o Spanner Omni configurando a biblioteca de cliente Java. Você estabelece essas conexões definindo as opções do cliente ao criar um cliente administrativo ou um cliente de banco de dados.
A biblioteca de cliente Java oferece suporte a conexões de texto simples, TLS, TLS com credenciais e mTLS.
Para mais informações, consulte Introdução ao Spanner no Java na documentação do Spanner.
Antes de começar
Para começar a usar o Spanner Omni no Java, use a biblioteca de cliente Java versão 6.119.0 ou mais recente.
Se você usar o Maven sem a lista de materiais (BOM), adicione o seguinte às dependências do arquivo pom.xml:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner</artifactId>
<version>6.119.0</version>
</dependency>
Configurações de segurança
A biblioteca de cliente Java do Spanner oferece suporte a quatro configurações de segurança, que definem como a comunicação é criptografada e autenticada entre o cliente e o Spanner Omni. A tabela a seguir descreve cada configuração:
| Configuração de segurança | Descrição |
|---|---|
| Texto simples | A comunicação não é criptografada. |
| TLS | A comunicação é criptografada usando o Transport Layer Security (TLS). Essa configuração exige que você adicione o certificado de CA do Spanner Omni ao keystore Java, conforme descrito em Configurar o keystore Java. |
| TLS com credenciais | A comunicação é criptografada usando TLS, e a autenticação é realizada usando um nome de usuário e uma senha. |
| mTLS | A comunicação é criptografada usando TLS mútuo (mTLS). Essa configuração exige que você forneça um certificado de cliente e uma chave privada do cliente. |
Configurar o keystore Java
Para todos os tipos de conexão criptografada (TLS, TLS com credenciais e mTLS), é necessário adicionar o certificado de CA do Spanner Omni ao keystore Java para que o cliente possa verificar o certificado do servidor.
Para adicionar o certificado de CA ao keystore Java padrão, execute o seguinte comando:
sudo keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts
Como alternativa, é possível especificar um keystore personalizado ao executar o aplicativo:
Para manter a compatibilidade com outros serviços que usam autoridades de certificação (CAs) padrão, copie o keystore Java padrão:
cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTSImporte o certificado de CA para o keystore personalizado:
keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTSEspecifique o keystore personalizado usando as propriedades do sistema JVM ao executar o aplicativo:
java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
Configurar o objeto SpannerOptions
Ao configurar o
SpannerOptions
objeto para criar um
DatabaseClient ou
DatabaseAdminClient,
especifique o endpoint do Spanner Omni usando setHost() seguido por setType(SpannerOptions.InstanceType.OMNI).
Os exemplos a seguir mostram como configurar o objeto SpannerOptions para cada configuração de segurança compatível:
Texto simples
Para estabelecer uma conexão de texto simples, especifique o endpoint do Spanner Omni com http:// e use o 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
Ao configurar o objeto SpannerOptions para uma conexão TLS, não é necessário especificar credenciais de nome de usuário e senha. Especifique o endpoint do Spanner Omni usando https://:
SpannerOptions options =
SpannerOptions.newBuilder()
.setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
.setType(SpannerOptions.InstanceType.OMNI)
.build();
Spanner spanner = options.getService();
TLS com credenciais
Para estabelecer uma conexão TLS com autenticação de nome de usuário e senha, especifique o endpoint do Spanner Omni usando https:// e o nome de usuário e a senha usando o 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 uma conexão mTLS, converta a chave gerada pelo Spanner Omni em um formato compatível com Java usando o seguinte comando:
openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt
O exemplo a seguir mostra como configurar o objeto SpannerOptions para usar um 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();
Receber um cliente de banco de dados
Depois de configurar o objeto SpannerOptions, você pode receber um cliente de banco de dados.
Como o Spanner Omni não usa IDs de projeto na nuvem ou de instância do Google Cloud, especifique default para o ID do projeto e o ID da instância ao criar um DatabaseId:
DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);