A segurança da grade de dados garante que um servidor que está se juntando tenha as credenciais certas, de modo que um servidor malicioso não possa juntar-se à grade de dados. A segurança da grade de dados usa um mecanismo de sequência de segredo compartilhado.
Todos os servidores WebSphere eXtreme Scale, incluindo servidores de catálogo, concordam quanto a uma cadeia de segredo compartilhado. Quando um servidor junta a grade de dados, ele é desafiado a apresentar a sequência secreta. Se a cadeia secreta do servidor que está se juntando corresponder à cadeia no servidor presidente ou servidor de catálogo, o servidor que está se juntando é aceito. Se a cadeia não corresponder, o pedido de junção é rejeitado.
Não é seguro enviar um segredo em texto não-criptografado. A infraestrutura de segurança do WebSphere eXtreme Scale fornece um plug-in do gerenciador de token seguro para permitir que o servidor proteja este segredo antes de enviar. Você deve decidir como implementar a operação de proteção. O WebSphere eXtreme Scale fornece uma implementação pronta para usar, na qual a operação segura é implementada para criptografar e assinar o segredo.
A cadeia do segredo é configurada no arquivo server.properties. Consulte o Arquivo de Propriedades do Servidor para obter mais informações sobre a propriedade authenticationSecret.
Um plug-in do gerenciador de token de segurança é representado pela interface com.ibm.websphere.objectgrid.security.plugins.SecureTokenManager.
Para obter mais informações sobre o plug-in SecureTokenManager, consulte aDocumentação da API SecureTokenManager.
O método generateToken(Object) obtém um objeto, e depois gera um token que não pode ser compreendido pelos outros. O método verifyTokens(byte[]) faz o processo inverso: o método converte o token de volta ao objeto original.
Uma implementação SecureTokenManager simples usa um algoritmo de codificação simples, como um algoritmo exclusivo ou (XOR), para codificar o objeto na forma serializada e depois usa o algoritmo de codificação correspondente para codificar o token. Essa implementação não é segura.
O WebSphere eXtreme Scale fornece uma implementação imediatamente disponível para esta interface.
A implementação padrão utiliza um par de chaves para assinar e verificar a assinatura e utiliza uma chave secreta para criptografar o conteúdo. Cada servidor tem um armazenamento de chaves de tipo JCKES para armazenar o par de chaves, uma chave privada e uma chave pública e uma chave secreta. O armazenamento de chaves tem que ser do tipo JCKES para armazenar as chaves secretas.
Estas chaves são utilizadas para criptografar e assinar ou verificar a cadeia de segredo na extremidade de envio. Além disso, o token está associado ao tempo de expiração. Na extremidade de recebimento, os dados são verificados, decriptografados e comparados com a cadeia de segredo do receptor. Os protocolos de comunicação Secure Sockets Layer (SSL) não são necessários entre um par de servidores para autenticação, porque as chaves privadas e as chaves públicas servem para a mesma finalidade. No entanto, se a comunicação do servidor não for criptografada, os dados poderão ser roubados por violação na comunicação. Como o token expira em breve, a ameaça de ataque à reprodução é minimizada. Esta possibilidade é significativamente reduzida se todos os servidores forem implementados atrás de um firewall.
A desvantagem desta abordagem é que os administradores do WebSphere eXtreme Scale precisam gerar chaves e transportá-las para todos os servidores, o que pode causar violação de segurança durante o transporte.
Conforme observado na seção anterior, é possível criar um keystore contendo um par de chaves para assinar e verificar a assinatura e uma chave secreta para criptografar o conteúdo.
Por exemplo, é possível utilizar o comando JDK 6 keytool para criar a chave da seguinte forma:
keytool -genkeypair -alias keypair1 -keystore key1.jck -storetype
JCEKS -keyalg
rsa -dname "CN=sample.ibm.com, OU=WebSphere eXtreme Scale" -storepass
key111 -keypass
keypair1 -validity 10000
keytool -genseckey -alias seckey1 -keystore key1.jck -storetype JCEKS
-keyalg
DES -storepass key111 -keypass seckey1 -validity 1000
Esses dois comandos criam um par de chaves "keypair1" e uma chave
secreta "seckey1".
É possível então configurar o seguinte no arquivo de propriedades do
servidor:secureTokenKeyStore=key1.jck
secureTokenKeyStorePassword=key111
secureTokenKeyStoreType=JCEKS
secureTokenKeyPairAlias=keypair1
secureTokenKeyPairPassword=keypair1
secureTokenSecretKeyAlias=seckey1
secureTokenSecretKeyPassword=seckey1
secureTokenCipherAlgorithm=DES
secureTokenSignAlgorithm=RSA