2

我在我的 iOS 应用程序中使用 HTTPS POST 连接到内部公司 REST 服务。此服务需要基本的 HTTP 身份验证。

当我尝试在 HTTPHeader 中传递身份验证参数时,服务器返回错误消息“Error Domain=NSURLErrorDomain Code=-1202”此服务器的证书无效。您可能正在连接到伪装成“oiam.XXXX.com”的服务器,这可能会使您的机密信息面临风险。” UserInfo=0x8d1de60 {NSErrorFailingURLStringKey= https://oiam.xxxx.com/NSLocalizedRecoverySuggestion=您愿意还是要连接到服务器?,”

我读了一些问题,看起来我需要安装证书。由于我在 iOS 模拟器上,因此无法安装证书。

我尝试使用 NSURLConnectionDelegate 协议并且连接正常

我唯一的问题是我传递用户名密码的这种方法。它安全吗?为什么我不需要对值进行编码?在 Header 中进行 HTTPS 基本身份验证时,我正在为传递值进行编码。

-(void)connection:(NSURLConnection *)connection       willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
if ([challenge previousFailureCount]) {
   [[challenge sender] cancelAuthenticationChallenge:challenge];
} else {
    NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username1"
                                   password:@"password1"                                                     
                                   persistence:NSURLCredentialPersistenceForSession];
    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
}
4

1 回答 1

3

对于内部使用和测试,您可以在使用类扩展时覆盖私有 API,NSURLRequest以便接受无效证书:

#if DEBUG

@interface NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host;

@end

@implementation NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    // ignore certificate errors only for this domain
    if ([host hasSuffix:@"oiam.XXXX.com"]) {
        return YES;
    }
    else {
        return NO;
    }
}

@end

#endif 

至于凭证的安全性问题,在通过网络传输之前,它们将根据需要进行编码。

于 2013-10-10T20:16:58.853 回答