Método alternativo para o privado “Setallowsanyhttpscertificate de NsurlRequest: FIRHEST:”?
-
18-09-2019 - |
Pergunta
Meu aplicativo para iPhone foi rejeitado apenas por usar o método privado (muito seguro, parece) +setAllowsAnyHTTPSCertificate:forHost:
por NSURLRequest
. Existe uma API não privada para imitar essa funcionalidade?
Solução
Parece haver uma API pública para isso;)Como usar o NSurlConnection para se conectar com o SSL para um certificado não confiável?
Outras dicas
Na verdade, estou testando com 10.6.8 e esse código ainda funciona - ele está usando a API privada, mas verificando se o seletor existe (Myurl é o NSURL que estou tentando carregar em um Webview ou uma NSurlConnection):
SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
IMP fp;
fp = [NSURLRequest methodForSelector:selx];
(fp)([NSURLRequest class], selx, YES, [myurl host]);
}
Observe que "@selector" não foi usado para que absolutamente tudo O trabalho seria feito em tempo de execução. Isso o torna tão seguro e oculto das verificações da Apple quanto possível, especialmente se você obscurecer a corda.
Uma solução realmente estúpida é criar seu próprio método de categoria:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
Isso deve obter as verificações de API privadas da Apple, mas ainda é a mesma coisa (usando uma API privada e indocumentada [1] que é responsável por quebrar a qualquer momento). Na verdade, é pior, pois permite tudo, não apenas esse anfitrião.
1]: Uma API privada que deve ser tornado público, mas uma API privada, no entanto.
SetallowsanyHttpSCertificate parece agora não ser suportado no OS X 10.6.6.
Eu disse 10.6.6? Talvez eu devesse ter dito "Vista de neve".
Não é uma solução, mas uma sugestão. Você já pensou em usar Estrutura ASIHTTPREQUEST por esta? Essa estrutura está completa em todos os aspectos. Verifique a documentação, talvez possa ajudá -lo também.