&引用;“不受信任的服务器证书”;在iPhone上

&引用;“不受信任的服务器证书”;在iPhone上,iphone,objective-c,http,status,Iphone,Objective C,Http,Status,我正在编写一个iPhone应用程序,我想连接到“HTTPS”服务器以获取一些信息。但是,我在控制台中得到了错误 NSUnderlyingError=错误域=KCFerrorDomainCFN网络代码=-1202 UserInfo=0x3e95cf0“此服务器的证书无效。您 可能正在连接假装为“example.com”的服务器 这可能会使你的机密信息处于危险之中。”;} 如何信任证书并获取http状态代码200 下面是我的代码 NSMutableURLRequest *request_ge

我正在编写一个iPhone应用程序,我想连接到“HTTPS”服务器以获取一些信息。但是,我在控制台中得到了错误

NSUnderlyingError=错误域=KCFerrorDomainCFN网络代码=-1202 UserInfo=0x3e95cf0“此服务器的证书无效。您 可能正在连接假装为“example.com”的服务器 这可能会使你的机密信息处于危险之中。”;}

如何信任证书并获取http状态代码200

下面是我的代码

    NSMutableURLRequest *request_get2 = [[[NSMutableURLRequest alloc] init] autorelease];
    [request_get2 setURL:[NSURL URLWithString:@"https://www.example.com"]]; 
    [request_get2 setHTTPMethod:@"GET"];
    [request_get2 setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    //[request_get2 setValue:@"text/html; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    [request_get2 setValue:@"https://www.example.com" forHTTPHeaderField:@"Referer"];
    [request_get2 setHTTPShouldHandleCookies:YES];
    // cookiesString is in format "cookieName=cookieValue;"
    [request_get2 setValue: (NSString *) cookiesString forHTTPHeaderField:@"Cookie"];


    // doGet - response
    NSHTTPURLResponse *response_get2 = nil;  // it change from 'NSURLRespaonse' to 'NSHTTPURLResponse'
    NSError *error_get2 = nil;
    NSData *responseData_get2 = [NSURLConnection sendSynchronousRequest:request_get2 returningResponse:&response_get2 error:&error_get2];
    NSString *data_get2 = [[NSString alloc]initWithData:responseData_get2 encoding:NSUTF8StringEncoding];

    if (!error_get2) {
        NSString *responseURL_get2 = [[response_get2 URL] absoluteString];           // null value
        NSString *responseTextEncodingName_get2 = [response_get2 textEncodingName];  // null value
        NSString *responseMIMEType_get2 = [response_get2 MIMEType];                  // null value
        NSUInteger *responseStatusCode_get2 = [response_get2 statusCode]; //[responseStatusCode intValue]; // the status code is 0
    }
    else {
        NSLog(@"\nsomething went wrong: %@\n", [error_get2 userInfo]); // got the error in here
    }

我认为添加不受信任的证书是不可能的(至少在模拟器中是不可能的),但是您可以告诉您的NSURLConnection委托接受自签名证书(或者通常是不受信任的证书)

下面的链接帮助我解决了这个问题


信任所有证书是一个非常糟糕的主意。恶意用户可以对您的用户执行中间人攻击,以读取或更改所有传输的数据

我相信您的证书不包含验证系统受信任根证书路径所需的所有中间证书。某些SSL配置验证工具可以将其报告为不完整的证书链

通过将证书中的所有证书连接到受信任的根证书(按此顺序为独占),可以手动解决不完整的证书链问题,以防止此类问题。注意,受信任的根证书不应该存在,因为它已经包含在系统的根证书存储中


您应该能够从颁发者处获取中间证书,并自己将它们连接在一起。我已经编写了一个脚本来自动化这个过程,它需要一个证书来生成正确链接的证书的输出

谢谢你,山姆。它非常有用。但是我还有一个问题,我应该把代码放在哪里。我曾经把代码放在一个.m类中。但它没有起作用。我查看了苹果开发者的网站,我知道这些都是预定义的功能,但是我应该在哪里调用它呢?我也曾经用NSLog()来打印内容,但是我看不到NSLog的内容。非常感谢。请在您的另一个帖子中看到我的答案,并附上相同的问题:)。。thxs