如何使用asihttprequest接受自签名证书

C.J*_*hns 9 iphone asihttprequest ios

我正在尝试使用自签名证书来处理我的应用程序.

我现在正在使用ASIHTTPRequest库,如下所示:

- (IBAction)sendHttpsRequest
{    
    //Set request address
    NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"https://142.18.87.46:443"];

    //call ASIHTTP delegates (Used to connect to database)
    NSURL *url = [NSURL URLWithString:databaseURL];

    //This sets up all other request
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    [request setDelegate:self];
    [request setValidatesSecureCertificate:YES];
    [request startAsynchronous];
}
Run Code Online (Sandbox Code Playgroud)

我已经将setValidatesSecureCertificate设置为YES,希望会发生一些事情,但显然什么都没有,因为我不确定我必须做什么.

这是我在日志中收到的错误

2011-12-06 14:27:33.514 connectionTest[916:207] Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)" UserInfo=0x683a860 {NSUnderlyingError=0x68390d0 "The operation couldn’t be completed. (OSStatus error -9807.)", NSLocalizedDescription=A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Jim*_*Jim 30

我已经将setValidatesSecureCertificate设置为YES,希望会发生一些事情,但显然什么都没有,因为我不确定我必须做什么.

这就是问题.它默认为YES,您需要将其设置为NO.由于您的证书是自签名的,因此iOS 无法验证证书 - 系统中没有签署证书的受信任机构,因此没有理由说它是有效的.因此,如果您要求它验证证书(这是默认值),则必须拒绝它.您必须禁用证书验证才能使自签名证书生效.

  • 它会跳过证书的验证.而已.它不会跳过加密.它不会"改变未来与服务器的通信".您告诉它跳过证书的验证,它正在这样做.如果您需要使用安全通道与Web服务进行通信,请花点时间了解您正在使用的协议.不要只是随意改变东西,希望能让它发挥作用.如果您正在使用HTTPS,那么可能这应该是安全的,如果您不理解您正在做什么,那就不会是这样. (6认同)
  • 我知道这是一个非常古老的帖子,但我正在使用SSL自签名证书.似乎关闭"setValidatesSecureCertificate"(将其设置为NO)并使用自签名证书会让您在中间攻击中对人开放. (2认同)