Introdução
No mês passado, lançamos o Developer Preview 1 do Couchbase .NET SDK 2.0, que apresentava suporte para operações gerais de chave/valor, uma nova API View Query e, provavelmente o mais interessante, uma prévia da nossa nova linguagem de consulta, N1QL (pronuncia-se "nickel"). Você pode ler mais sobre esse lançamento aqui. Este mês, estamos lançando o Developer Preview 2 (doravante DP2) do Couchbase .NET SDK 2.0, repleto de novos recursos para dar suporte ao nosso próximo lançamento do Couchbase Server 3.0, ainda este ano!
Suporte a SSL
Atualmente, a comunicação entre o Couchbase Server e o SDK do cliente é feita por meio de canais não seguros. Com o Couchbase Server 3.0, Camadas de soquete seguro (SSL) permitirá, opcionalmente, que essa comunicação seja feita por meio de um canal seguro e criptografado.
A ativação do SSL requer algumas coisas:
- Couchbase Server 3.0 (Beta a ser disponibilizado no final deste verão)
- Um certificado SSL (adquirido do Couchbase Server 3.0)
- Alterações de configuração no cliente: definição de useSsl = true em um bucket ou configuração de cluster
- Armazenamento do certificado no repositório de Autoridades de Certificação Raiz Confiáveis (no Windows)
Nesse ponto, tudo o que você precisa fazer é ativar o suporte a SSL no cliente. Para isso, você pode ativá-lo no nível do cluster ou por bucket. A configuração do suporte a SSL no nível do cluster significa que todos os buckets dentro do cluster usarão SSL. Se desejar usar o SSL somente em Buckets específicos, basta configurar o Bucket individual para usar o SSL.
var configuration = new ClientConfiguration
{
UseSsl = true
};
CouchbaseCluster.Initialize(configuration);
var cluster = CouchbaseCluster.Get();
Observe que, se você definir UseSSL como verdadeiro no nível do cluster, ele substituirá qualquer configuração definida no nível do Bucket.
Aguarde uma postagem futura sobre a configuração do SSL em detalhes no futuro.
Autenticação CRAM-MD5
O Couchbase Server usa Camada de segurança e autenticação simples (SASL) para autenticar a interação do usuário nos níveis do servidor e do bucket. O SASL fornece vários mecanismos para lidar com a autenticação. Em sua forma mais simples, ele usa um mecanismo de texto simples que envia o nome de usuário e a senha entre os clientes em sua forma de texto simples.
O envio de nome de usuário e senha pela rede em texto simples não é inerentemente seguro e, potencialmente, abre espaço para todos os tipos de ataques de filtragem e detecção usando ferramentas disponíveis publicamente, como o Wire Shark. No entanto, com o lançamento do Couchbase 2.2 no ano passado, há suporte para a autenticação CRAM-MD5 SASL no servidor e, agora, com o DP2, ela também está disponível no SDK do .NET.
O que CRAM-MD5 O SASL usa um mecanismo de autenticação de desafio-resposta para garantir que a senha seja transformada em hash entre o cliente e o servidor. Como isso funciona, o cliente inicia a comunicação e o servidor responde com um desafio. Em seguida, o cliente usa o desafio para criar HMAC-MD5 da senha e algumas informações adicionais e as envia de volta ao servidor. O servidor usa o mesmo desafio para comparar a resposta esperada. Se elas coincidirem, a autenticação continua e, se for bem-sucedida, o cliente recebe acesso ao recurso.
Observe que, para ativar a CRAM-MD5 no cliente, você não precisa fazer nada! Quando o cliente inicia a comunicação, ele solicita uma lista de mecanismos SASL compatíveis; se o servidor ao qual está tentando se conectar for compatível com o CRAM-MD5, o cliente usará esse mecanismo.
Suporte à configuração de Web.Config e App.Config
No DP1, mostramos como configurar programaticamente o cluster e os Buckets. No DP2, adicionamos suporte à configuração do Web.config e do App.config. Aqui está um exemplo de App.config:
<configuration>
<configSections>
<sectionGroup name=”couchbaseClients”>
</sectionGroup>
</configSections>
<couchbaseClients>
<couchbase>
<servers>
<add uri=”http://localhost:8091″></add>
</servers>
<buckets>
<add name=”default” password=”” useSsl=”false”>
<connectionPool name=”custom” maxSize=”10″ minSize=”5″ waitTimeout=”5000″ shutdownTimeout=”3000″></connectionPool>
</add>
</buckets>
</couchbase>
</couchbaseClients>
<startup>
<supportedRuntime version=”v4.0″ sku=”.NETFramework,Version=v4.5″ />
</startup>
</configuration>
Comece criando um sectionGroup em configSections para a CouchbaseClientSection que será definida posteriormente no arquivo de configuração. Dentro do sectionGroup, crie uma nova seção e dê um nome a ela; neste caso, estamos usando uma seção apropriadamente chamada "couchbase". Na seção "couchbase", você pode especificar um conjunto de servidores a serem usados para inicialização e os Buckets com os quais deseja trabalhar. Um Bucket especifica o elemento connectionPool que fornece um meio de configurar o pool de conexão TCP interno para uma instância do Bucket.
Suporte adicional ao operador
As operações Insert e Get foram liberadas no DP1; no DP2, as operações suportadas foram expandidas para incluir o seguinte:
- Upsert: atualiza uma chave se ela existir, caso contrário, adiciona-a.
- Replace: atualiza uma chave se ela existir, falhando se não existir
- Remove: remove uma chave do banco de dados
Além disso, várias operações internas de suporte ao SASL CRAM-MD5 estão incluídas nesta versão. Espere um conjunto completo de operações, incluindo Check and Swap (CAS) e suporte para restrições de durabilidade no Beta 1, a ser lançado no próximo mês.
Obtendo os bits
Você pode fazer o download do DP2 em aqui e temos um exemplo muito simples aqui. Como qualquer software em pré-lançamento, é provável que haja bugs e você pode esperar que as coisas mudem nas versões subsequentes, portanto, não use a DP2 na produção! Se você encontrar um bug, quiser fornecer feedback (esperamos que sim) ou sugerir um recurso, sinta-se à vontade para enviar um comentário ou criar um NCBC aqui.