Adicionando um certificado autoassinado ao simulador de iphone?

87

Eu tenho um certificado autoassinado no terminal de minha API. Estou tentando testar algumas coisas usando o simulador, mas estou recebendo "certificado de servidor não confiável".

Tentei usar o safari no simulador para baixar o arquivo .crt, mas não parece funcionar.

De onde o iPhone Simulator consegue suas chaves? Como posso adicionar um certificado confiável para que meu aplicativo funcione?

ATUALIZAR

Comecei a trabalhar criando uma CA e, em seguida, adicionando um certificado CA usando a ferramenta de provisionamento do iPhone. Então, consegui ter um certificado assinado por esse certificado CA no servidor API e o NSConnection funcionou. Não consegui fazê-lo funcionar usando um certificado autoassinado por algum motivo. Preciso tentar novamente usando o software de provisionamento.

Minha verdadeira pergunta é como faço para que isso funcione no simulador? Eu acho que o simulador usa o chaveiro do computador real.

jr.
fonte
1
Recentemente, encontrei isso com um host confiável para um certificado CA que foi importado para o keychain de login no Mac de desenvolvimento. (Ou seja, meu Safari local confia no site, mas não no simulador.) Fiquei surpreso por não funcionar com o simulador. Como usar a ferramenta de provisionamento do iPhone para manipular os certificados confiáveis ​​no simulador?
mpontillo de

Respostas:

113

Apenas para informação, se alguém ainda tiver esse problema:

simplesmente arraste e solte seus arquivos .cer na janela do Simulador em execução. Você verá o Safari piscando e a caixa de diálogo de importação do seu certificado (ou autoridade de certificação) ...

Trabalhando para iOS 7 Simulator (e acho que funcionou para iOS 6 também).

seafoxx
fonte
3
Arrastar e soltar funciona bem para o simulador iOS 7 com certeza. Posso verificar que NÃO funciona nos simuladores iOS 6.0 / 6.1.
John Bowers
2
sou eu ou desde que fiz upgrade para o Xcode 6, esse recurso de arrastar e soltar agora só funciona na versão iOS 8 do simulador. Experimentei o simulador do iPhone 5s iOS 7 e iOS 7.1, nada acontece quando arrasto o certificado para a janela do simulador. E agora estou preso e não consigo testar meu aplicativo em nada além do iOS 8.
Fred
2
Descobri uma solução alternativa para o iOS 7 e 7.1: coloque seu arquivo .cer em um servidor web acessível (adicionando o tipo mime application / x-x509-ca-cert se necessário) e use o Safari no simulador para baixar o certificado do servidor da web. Em seguida, ele solicitará que você o instale como se o tivesse arrastado e solto.
Fred
3
Você é um deus, meu amigo
CommaToast
1
você é o cara! Eu sabia que deveria haver uma maneira rápida de fazer isso.
pqsk
44

Para quem acha que arrastar e soltar o certificado no Simulador não está funcionando, houve uma alteração recente que adiciona uma etapa extra .

O Simulador deve ser informado explicitamente para confiar na CA raiz. Faça isso indo para:

Geral -> Sobre -> Configurações de confiança do certificado -> "Ativar confiança total para certificado raiz" para o seu certificado específico

Veja a resposta completa aqui :

Gautham C.
fonte
13
A opção "Habilitar confiança total para certificado raiz" não está lá em meu simulador executando ios 10.3
Jesus Rodriguez
1
Você já resolveu esse problema - o certificado raiz não está listado em Certificate Trust Settings? Meu perfil é adicionado e inclui um certificado - este foi apenas trabalhar menos de um mês atrás. Reinicialize meus caches de simulador, agora o certificado foi adicionado, mas nenhuma opção para confiar totalmente nele.
chrisp
3
No meu caso, a opção "Habilitar confiança total para certificado raiz" aparece apenas para certificados raiz. Não aparece para certificados intermediários ou folha.
John Girata,
1
Também descobri que o certificado deve ter a opção de restrição básica da CA definida como verdadeira: basicConstraints = CA:TRUEao gerar o certificado usando o openssl. Caso contrário, ele não aparecerá para ser confiável.
sandinmyjoints de
3
Parece que no 12.2 (provavelmente versões anteriores também) o procedimento agora é ir para geral> perfis, selecionar o certificado e clicar em instalar no canto superior direito
MaxPRafferty
23

Eu tive esse mesmo problema por meses e hoje eu FINALMENTE resolvi com:

ADVTrustStore

Você vai querer usar um projeto chamado ADVTrustStore do github. Ele faz uma mágica extravagante, mas instalará corretamente os certificados em seu armazenamento de confiança raiz no simulador.

Etapas para instalar um certificado personalizado

# Clone the repo
git clone https://github.com/ADVTOOLS/ADVTrustStore.git

# Enter the repo directory
cd ADVTrustStore/

# Copy your .crt file 
cp somewhere/something.crt my.crt

# conver to a .pem file
openssl x509 -in my.crt -out my.pem -outform PEM

# Install the pem in the simulators
./iosCertTrustManager.py -a my.pem

Usando esse processo, consegui fazer com que as imagens do GoogleStreetView fossem renderizadas corretamente enquanto estava atrás de um firewall corporativo usando SSL resignado com certificados autoassinados

fundo

Eu estava usando CharlesProxy e notei que ele estava instalando corretamente os certificados no Simulador, mas eles não apareceram na seção Configurações - Perfis . Então, depois de algumas pesquisas, descobri essa ferramenta. Provavelmente, existem algumas outras ferramentas por aí, mas no meu caso o arrastar e soltar nunca funcionou corretamente em todos os casos. Safari seria bom, mas não meus aplicativos.

Jeef
fonte
3
DICA: reinicie o simulador para obter o novo certificado instalado.
Kiko Seijo
1
Isso funcionou para mim com o simulador Xcode 10.1 e iPhone 5s 12.1. Você só precisa certificar-se de dizer ao script para instalar o certificado no simulador correto. Se você estiver usando isso em conjunto com badssl.test (ou seja, badssl rodando localmente no docker), você precisará hackear o .pem para remover tudo, exceto o certificado real.
Andrew Ebling
isso salvou minha vida. quase não há suporte da comunidade para instalar certificados autoassinados em iOS. obrigado!
lsimonetti de
Confirmo que funciona no Simulador 10.3 para iPhone X com iOS 12.4.
Sergei Basharov,
9

Dê uma olhada no script de shell que Charles usa para instalar seu certificado autoassinado nas chaves do simulador. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Veja também:

Parece que a instalação de seu próprio certificado no simulador pode exigir a instalação em um dispositivo via Safari e, em seguida, a cópia da linha resultante do dispositivo TrustStore.sqlite3para o do simulador.

Jonah
fonte
Resposta de @nailer atualizada com mais algumas referências, pelo que eu sei, o formato desses blobs em TrustStore.sqlite3 é opaco (e potencialmente sujeito a alterações), então a abordagem que outros tomaram parece ser instalar o certificado em um dispositivo via Safari e copiando a linha TrustStore resultante em seu simulador.
Jonah
9

Para qualquer pessoa que use o OS X Catalina, verifique: https://forums.developer.apple.com/thread/124056 .

Catalina está atualmente bloqueando o acesso à pasta Desktop, Documentos e Downloads. Mudei os arquivos de certificado para a pasta compartilhada e arrasto e solto os arquivos para o simulador de lá.

KnightCavalry
fonte
3
Deus te
2

Usando o iPhone Backup Extractor , copiei meu iPhone TrustStore.sqlite3para o ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains, sobrescrevendo o arquivo existente. Tentei inserir apenas uma única linha com o sqlite a seguir, mas não consegui fazer funcionar.

sqlite3 ~/backup/iOS\ Files/TrustStore.sqlite3
sqlite3>.mode insert
sqlite3>.output working.sql
sqlite3>select * from tsettings;
sqlite3>.quit

Agora, working.sqltem todo o conteúdo da tabela tsettings (no meu caso, 1 linha).

sqlite3 ~/Library/Application\ Support/iPhone\ Simulator/6.0/Library/Keychains/TrustStore.sqlite3
sqlite3>INSERT INTO tsettings VALUES(X'...
sqlite3>.quit

Novamente, os comandos sqlite acima não funcionaram para mim, mas podem ser um bom ponto de partida para outra pessoa. Copiar todo TrustStore.sqlite3o backup para o simulador funcionou perfeitamente.

Heath Borders
fonte