A comunicação entre o Couchbase Lite e o Sync Gateway é criptografada e protegida usando SSL/TLS. O protocolo SSL/TLS se baseia em uma infraestrutura de chave pública (PKI) usando um mecanismo Certificado X.509 para estabelecer a identidade do servidor do Sync Gateway. Normalmente, o certificado é emitido/assinado por uma Autoridade de Certificação confiável e é instalado no Sync Gateway. Em um ambiente de desenvolvimento, esse certificado pode ser autoassinado.
Se a confiabilidade do certificado for comprometida de alguma forma ou se você estiver usando um certificado autoassinado, a identidade do servidor não poderá ser estabelecida de forma confiável e não haverá garantias de confidencialidade na comunicação entre o cliente e o servidor.
Para aliviar esses problemas, o Couchbase Lite oferece suporte à fixação de certificados. A fixação de certificados é uma técnica que pode ser usada por aplicativos para "fixar" um host em seu certificado/chave pública. Em geral, o certificado é entregue ao cliente por um canal fora de banda e empacotado com o cliente. Ao fixar o certificado, o aplicativo cliente verificador não precisa mais depender de uma terceira parte confiável para verificar a assinatura, e essa técnica também funciona com certificados autoassinados.
Esta postagem abordará como fixar certificados em seu aplicativo cliente iOS Coucbase Lite.
Versão 1.4 do Couchbase Lite suporta apenas a fixação de certificados no iOS. O próximo Versão 2.0 (agora no Developer Preview) oferecerá suporte à fixação em todas as plataformas móveis compatíveis. Os trechos de código discutidos nesta postagem se aplicam ao versão de produção atual do Couchbase Lite. Fique atento a uma futura postagem no blog sobre a fixação de certificados na versão 2.0.
O problema
A comunicação entre o Couchbase Lite e o Sync Gateway é criptografada usando SSL/TLS.
Em um nível muito alto, o protocolo TLS funciona da seguinte forma.
Um certificado X.509 contendo a chave pública e a identidade do servidor é instalado no Sync Gateway. Esse certificado de chave pública pode ser assinado por uma Autoridade de Certificação de terceiros confiável ou pode ser autoassinado, sendo este último o caso mais comum em ambientes de desenvolvimento.
Durante o estabelecimento da conexão, o aplicativo cliente que executa o Couchbase Lite verifica a identidade do Sync Gateway usando o certificado do servidor. O Couchbase Lite usa o certificado raiz da CA confiável para validar o certificado. Uma vez verificado, o cliente prossegue com a troca de chaves secretas. O segredo compartilhado é então usado para criptografar a comunicação entre o cliente e o Sync Gateway.

Consulte o RFC para obter informações específicas sobre o protocolo SSL/TLS.
Há alguns problemas com essa abordagem :-.
- Embora, na maioria das circunstâncias, seja razoável confiar na confiabilidade da CA, é possível que a própria CA seja comprometida. Se isso acontecer, não haverá uma maneira confiável de autenticar o Sync Gateway porque a CA usada para a verificação em si não é confiável!
- A comunicação cliente-servidor pode estar sujeita a um ataque MiTM (Man-in-the-Middle), por meio do qual um servidor desonesto que se faz passar por Sync Gateway pode emitir um certificado falso representando o Sync Gateway, assinado por uma CA falsa. Se, de alguma forma, o cliente for induzido a incluir o certificado da CA falsa em seu armazenamento de autoridade de certificação raiz confiável, o cliente confiará no certificado falso assinado pela CA falsa. Isso fará com que o cliente se comunique com um Sync Gateway falso.
- Se você estiver usando certificados autoassinados em seu ambiente de desenvolvimento, não há como o cliente validar de forma confiável a identidade do servidor.
Uma solução - Fixação de certificados
Uma maneira comum de lidar com os problemas acima é "fixar" o servidor Sync Gateway em seu certificado/chave pública. Nessa técnica, o Couchbase Lite é pré-configurado com o certificado confiável do Sync Gateway. Portanto, durante o estabelecimento da conexão, o Couchbase Lite usa esse certificado pré-configurado para verificar a identidade do servidor. Isso elimina a dependência de uma CA externa de terceiros para a verificação do certificado.
O Site da OWASP é uma boa referência sobre a fixação de certificados.
Advertência
É importante observar que, como os aplicativos são empacotados com o certificado, toda vez que o certificado expira, o aplicativo precisa ser atualizado com o novo certificado. Isso pode ser um pouco mais desafiador em ambientes móveis, nos quais os lançamentos de aplicativos podem exigir revisões da App Store e o ônus de atualizar os aplicativos recai sobre os usuários. Portanto, esteja ciente de quando os certificados expiram e faça planos apropriados para publicar os aplicativos com os novos certificados.
Histórico
A pilha do Couchbase Mobile inclui o Couchbase Lite banco de dados incorporado executado localmente em dispositivos e Gateway de sincronização na nuvem, que normalmente é apoiada por Servidor Couchbase persistindo os dados na nuvem. O Sync Gateway lida com a replicação de documentos entre os dispositivos.
Instalação do certificado no Sync Gateway
Siga as instruções na seção Portal do desenvolvedor do Couchbase para instalar o certificado de servidor relevante em seu Sync Gateway
Alguns pontos a serem observados durante a geração do certificado
- O certificado e a chave privada correspondente devem estar no formato .pem
- Instale os certificados em um local acessível ao Sync Gateway
- Se você estiver gerando um certificado autoassinado, provavelmente o campo mais importante é o CommonName. Deve ser o FQDN de seu Sync Gateway. Se o seu Sync Gateway não tiver um, você deverá especificar use localhost para localhost ou o endereço IPA estático do seu Sync Gateway.

Uma vez configurado, seu gateway de sincronização deve ser acessado via https.
Agrupamento de certificados em seu aplicativo iOS
- Converta o certificado PEM no formato der usando o comando abaixo
|
1 |
openssl x509 -informar PEM -em certificado.pem -Formulário DER -saída certificado.cer |
Você pode consultar este Folha de dicas sobre SSL para obter detalhes sobre os vários comandos do openSSL.
- Abra seu arquivo .xcodeproj e arraste e solte os arquivos .der em seu poejct. Certifique-se de que você tenha "Copiar arquivos, se necessário" opção marcada

- Após a cópia, a estrutura de seu projeto seria algo como o seguinte

- Fixação do certificado do servidor Sync Gateway
Isso requer apenas algumas linhas de código. O código deve ser executado uma vez. Portanto, fazê-lo no ponto do código em que você inicializa o Gerenciador de CBL pode ser uma boa opção.
|
1 2 3 4 5 6 7 8 9 10 |
// 1: Localizar o certificado no pacote de aplicativos se deixar pathToCert = Pacote.principal.caminho(paraRecurso: "cert", ofType: "cer") { //2 : Carregar o certificado se deixar localCertificate:NSData = NSData(contentsOfFile: pathToCert) { // 3: criar um SecCertificate deixar certificado = SecCertificateCreateWithData(nulo, localCertificate) //4: Configurar o Replicador com o certificado CBLReplicação.setAnchorCerts([certificado], somenteEstes: verdadeiro) } } |
As etapas 1 e 2 são autoexplicativas.
Etapa 3: SecCertificate é um objeto do Core Foundation que representa um certificado X.509
Etapa 4: O Couchbase Replicator deve ser configurado com o certificado do Sync Gateway usando o comando setAnchorCerts no método CBLReplicação objeto. Ao especificar somenteEstes como verdadeiroSe você definir o certificado como "certificado de segurança", estará dizendo ao Replicator que ele deve confiar apenas nesse certificado. Se você o definir como falsoSe você estiver adicionando o certificado do Sync Gateway à lista de certificados raiz integrados confiáveis pela plataforma iOS.
É isso aí! Com apenas algumas etapas, você pode ativar a fixação de certificados em seu aplicativo iOS.
O que vem a seguir
Como você deve ter percebido nesta publicação, a fixação de certificados é muito fácil de configurar em seus aplicativos iOS. Embora o suporte na V1.4 seja limitado ao iOS, fique atento à próxima versão do Versão 2.0 (agora no Developer Preview), que também incluirá suporte em outras plataformas móveis.
Se tiver dúvidas ou comentários, deixe um comentário abaixo ou sinta-se à vontade para entrar em contato comigo pelo Twitter @rajagp ou por e-mail priya.rajagopal@couchbase.com. O Fóruns do Couchbase são outro bom lugar para entrar em contato com perguntas.