Criei meu próprio certificado CA e agora quero instalá-lo no meu dispositivo Android Froyo (HTC Desire Z), para que o dispositivo confie no meu certificado.
O Android armazena certificados de CA em seu keystore Java em /system/etc/security/cacerts.bks
. Copiei o arquivo para o meu computador, adicionei meu certificado usando o portecle 1.5 e o empurrei de volta para o dispositivo.
Agora, o Android parece não recarregar o arquivo automaticamente. Li em várias postagens de blog que preciso reiniciar o dispositivo. Isso faz com que o arquivo seja substituído pelo original novamente.
Minha próxima tentativa foi instalar o certificado do cartão SD, copiando-o e usando a opção correspondente no menu de configurações. O dispositivo diz que o certificado foi instalado, mas aparentemente não confia no certificado. Além disso, quando tento copiar o keystore para o meu computador, ainda encontro o estoque original cacerts.bks
.
Então, qual é a maneira correta de instalar meu próprio certificado de CA raiz em um dispositivo Android 2.2 como um certificado confiável? Existe uma maneira de fazer isso programaticamente?
fonte
Respostas:
Antes do Android KitKat, você precisa fazer o root no seu dispositivo para instalar novos certificados.
Do Android KitKat (4.0) até o Nougat (7.0) , é possível e fácil. Consegui instalar o certificado Charles Web Debbuging Proxy no meu dispositivo não-rooteado e detectar com êxito o tráfego SSL.
Extrato de http://wiki.cacert.org/FAQ/ImportRootCert
A partir do Android N, fica um pouco mais difícil, veja este extrato no site de proxy da Charles :
Adicione um arquivo res / xml / network_security_config.xml ao seu aplicativo:
Em seguida, adicione uma referência a este arquivo no manifesto do seu aplicativo, da seguinte maneira:
fonte
/system/etc/security/cacerts/*.0
) não são mantidos após a reinicialização / reinicialização do AVD, portanto, esta solução não teve êxito.debug-overrides
, isso significa que essanetwork_security_config
segmentação é apenas uma variante de depuração? Se eu tiver outra variante como a variante UAT, isso não funcionará?Passei muito tempo tentando encontrar uma resposta para isso (preciso do Android para ver os certificados StartSSL). Conclusão: o Android 2.1 e 2.2 permitem importar certificados, mas apenas para uso com WiFi e VPN. Não há interface do usuário para atualizar a lista de certificados raiz confiáveis, mas há discussões sobre como adicionar esse recurso. Não está claro se existe uma solução confiável para atualizar e substituir manualmente o arquivo cacerts.bks.
Detalhes e links: http://www.mcbsys.com/techblog/2010/12/android-certificates/ . Nessa postagem, consulte o link para o bug 11231 do Android - você pode adicionar seu voto e consulta a esse bug.
fonte
Se você precisar do seu certificado para conexões HTTPS, poderá adicionar o arquivo .bks como recurso bruto ao seu aplicativo e estender DefaultHttpConnection para que seus certificados sejam usados para conexões HTTPS.
fonte
O guia vinculado aqui provavelmente responderá à pergunta original sem a necessidade de programar um conector SSL personalizado.
Encontrei um guia de instruções muito detalhado sobre a importação de certificados raiz que realmente o orienta na instalação de certificados CA confiáveis em diferentes versões de dispositivos Android (entre outros dispositivos).
Basicamente, você precisará:
Download: o arquivo cacerts.bks do seu telefone.
adb pull /system/etc/security/cacerts.bks cacerts.bks
Faça o download do arquivo .crt da autoridade de certificação que você deseja permitir.
Modifique o arquivo cacerts.bks no seu computador usando o BouncyCastle Provider
Faça o upload do arquivo cacerts.bks de volta para o seu telefone e reinicie.
Aqui está um passo a passo mais detalhado para atualizar os telefones Android anteriores: Como atualizar o keystore da autoridade de certificação de segurança HTTPS no dispositivo pré-Android-4.0
fonte
Existe uma solução MUITO mais fácil para isso do que postada aqui ou em tópicos relacionados. Se você estiver usando uma visualização na web (como eu sou), poderá conseguir isso executando uma função JAVASCRIPT nela. Se você não estiver usando uma visualização na web, convém criar uma oculta para esse fim. Aqui está uma função que funciona em praticamente qualquer navegador (ou webview) para iniciar a instalação da CA (geralmente através do repositório OS cert compartilhado, inclusive em um Droid). Ele usa um bom truque com os iFrames. Apenas passe o URL para um arquivo .crt para esta função:
ATUALIZAR:
O truque iframe funciona em Droids com API 19 e superior, mas versões mais antigas da visualização na web não funcionam assim. A idéia geral ainda funciona - basta fazer o download / abrir o arquivo com uma visualização na web e deixar o SO assumir o controle. Esta pode ser uma solução mais fácil e mais universal (no java atual agora):
Observe que instance_ é uma referência à atividade. Isso funciona perfeitamente se você souber o URL do certificado. No meu caso, no entanto, resolvo isso dinamicamente com o software do servidor. Eu tive que adicionar uma quantidade razoável de código adicional para interceptar um URL de redirecionamento e chamar isso de uma maneira que não causasse uma falha com base em uma complicação de segmentação, mas não adicionarei toda essa confusão aqui ...
fonte
O que eu fiz para o beable usar certificados openssl foi bastante fácil. (no meu telefone raiz)
Copiei /system/etc/security/cacerts.bks para o meu sdcard
Transferido por http://www.startssl.com/certs/ca.crt e http://www.startssl.com/certs/sub.class1.server.ca.crt
Foi ao portecle.sourceforge.net e executou o portecle diretamente da página da web.
Abri meu arquivo cacerts.bks do meu sdcard (nada foi inserido quando solicitada uma senha)
Escolha importar no portacle e abra sub.class1.server.ca.crt, no meu caso, ele já tinha o ca.crt, mas talvez você precise instalá-lo também.
Salvei o keystore e o copiei baxck para /system/etc/security/cacerts.bks (fiz um backup desse arquivo primeiro, apenas por precaução)
Reiniciei meu telefone e agora posso visitar meu site usando um certificado openssl sem erros.
fonte
Essas etapas funcionaram para mim:
Como alternativa, encontrei essas opções que eu não precisava tentar, mas parecia fácil de seguir:
Finalmente, pode não ser relevante, mas, se você deseja criar e configurar um certificado autoassinado (com mkcert) para seu aplicativo PWA (site) hospedado em um servidor Web IIS local, segui esta página:
https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031
Obrigado e espero que ajude !! :)
fonte
Aqui está uma solução alternativa que realmente adiciona seu certificado à lista interna de certificados padrão: Confiando em todos os certificados usando HttpClient sobre HTTPS
No entanto, ele funcionará apenas para o seu aplicativo. Não há como fazê-lo programaticamente para todos os aplicativos no dispositivo de um usuário, pois isso seria um risco à segurança.
fonte
Se você possui um dispositivo raiz, pode usar um módulo Magisk para mover Certs do Usuário para o Sistema, para que seja Certificado Confiável.
https://github.com/yochananmarqos/Move-Certificates
fonte