内容简介:我想使用iOS中代码附带的自签名证书创建到我的服务器的SSL连接.这样我就不必担心更复杂的中间人攻击,其中有人可以访问高级“可信”的证书颁发机构.使用我认为是Apple的标准方式,我遇到了问题.通过找到的程序生成证书和iOS代码:
我想使用iOS中代码附带的自签名证书创建到我的服务器的SSL连接.这样我就不必担心更复杂的中间人攻击,其中有人可以访问高级“可信”的证书颁发机构.使用我认为是Apple的标准方式,我遇到了问题.
通过找到的程序生成证书 here
# Create root CA & private key openssl req -newkey rsa:4096 -sha512 -days 9999 -x509 -nodes -out root.pem.cer # Create a certificate signing request openssl req -newkey rsa:4096 -sha512 -nodes -out ssl.csr -keyout ssl.key # Create an OpenSSL Configuration file from http://svasey.org/projects/software-usage-notes/ssl_en.html vim openssl.conf # Create the indexes touch certindex echo 000a > certserial echo 000a > crlnumber # Generate SSL certificate openssl ca -batch -config openssl.conf -notext -in ssl.csr -out ssl.pem.cer # Create Certificate Revocation List openssl ca -config openssl.conf -gencrl -keyfile privkey.pem -cert root.pem.cer -out root.crl.pem openssl crl -inform PEM -in root.crl.pem -outform DER -out root.crl && rm root.crl.pem
和iOS代码:
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { NSURLProtectionSpace *protectionSpace = [challenge protectionSpace]; if ([protectionSpace authenticationMethod] == NSURLAuthenticationMethodServerTrust) { // Load anchor cert.. also tried this with both certs and it doesn't seem to matter NSString *path = [[NSBundle mainBundle] pathForResource:@"root.der" ofType:@"crt"]; NSData *data = [[NSData alloc] initWithContentsOfFile:path]; SecCertificateRef anchorCert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)data); CFMutableArrayRef anchorCerts = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); CFArrayAppendValue(anchorCerts, anchorCert); // Set anchor cert SecTrustRef trust = [protectionSpace serverTrust]; SecTrustSetAnchorCertificates(trust, anchorCerts); SecTrustSetAnchorCertificatesOnly(trust, YES); // only use that certificate CFRelease(anchorCert); CFRelease(anchorCerts); // Validate cert SecTrustResultType secresult = kSecTrustResultInvalid; if (SecTrustEvaluate(trust, &secresult) != errSecSuccess) { [challenge.sender cancelAuthenticationChallenge:challenge]; return; } switch (secresult) { case kSecTrustResultInvalid: case kSecTrustResultDeny: case kSecTrustResultFatalTrustFailure: case kSecTrustResultOtherError: case kSecTrustResultRecoverableTrustFailure: { // !!! It's always kSecTrustResultRecoverableTrustFailure, aka 5 NSLog(@"Failing due to result: %lu", secresult); [challenge.sender cancelAuthenticationChallenge:challenge]; return; } case kSecTrustResultUnspecified: // The OS trusts this certificate implicitly. case kSecTrustResultProceed: { // The user explicitly told the OS to trust it. NSURLCredential *credential = [NSURLCredential credentialForTrust:trust]; [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; return; } default: ; /* It's somebody else's key. Fall through. */ } /* The server sent a key other than the trusted key. */ [connection cancel]; // Perform other cleanup here, as needed. } else { NSLog(@"In weird space... not handling authentication method: %@", [protectionSpace authenticationMethod]); [connection cancel]; } }
我总是得到kSecTrustResultRecoverableTrustFailure作为结果.我不认为这是localhost问题,因为我已经尝试使用Apple的代码来改变它.该怎么办?
谢谢!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Frida应用基础及APP https证书验证破解
- Apache Tomcat Native 1.2.17 发布,修复证书验证
- 技术讨论 | 四种绕过iOS SSL验证和证书固定的方法
- 使用SPIRE(自动)提供TLS证书给Envoy以进行更强大的身份验证
- RHCE证书,CCNA证书
- DV SSL证书和其他证书有什么不同?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机图形学原理及实践:C语言描述(原书第2版) (平装)
福利 / 唐泽圣 / 机械工业出版社 / 2004-3 / 95.0
《计算机图形学原理及实践:C语言描述(原书第2版)》:这是计算机图形学领域的一部经典之作,作者Fley、va Dam等是国际图形学界的著名学者、学术带头人,而且《计算机图形学原理及实践:C语言描述(原书第2版)》英文版自出版以来,一直是各国大学计算机图形学课程的主要教科书。来自清华大学、北京大学、中国科学院计算技术研究所、中国科学院软件研究所的多位图形学领域的专家和精英花费了大量的时间和精力进行翻......一起来看看 《计算机图形学原理及实践:C语言描述(原书第2版) (平装)》 这本书的介绍吧!