- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在整个网络上看到关于 .cer 文件是什么以及如何生成它以便应用程序可以通过 https 与服务器正确通信的不连贯帐户。
引用this来源,一个人说:
1) You now need .cer files in your bundle for all certificates in the chain. So, at least, two certificate files must be present (your certificate and the root CA). In our case, we needed an intermediate as well.
2) These certificates must be in a particular order. Specifically, the certificate that certifies the host that you are communicating with must be first in the list of pinned certificates/keys. It doesn't look like the order of the rest of them matter. This is because AFSecurityPolicy uses the first object in the array to validate the host name.
3) The host validation fails for wildcard certificates if you are communicating with the root domain. For example, consider a certificate pointed at *.foo.com. If you are communicating with foo.com, the host check will fail because the host component counts will not match. I understand the need for this early optimization, but it fails before it even reaches the logic that specifically handles wildcard domains.
官方文档支持这一点 here .
我想为了生成它,必须将整个证书链的内容按特定顺序放入 .cer 文件中。我记得在某个地方看到过这个帖子,但似乎找不到。
问题是,为 AFNetworking 创建 .cer 文件的无可争辩的方法是什么?
更新:
经过更多研究,在我看来,您只需获取 .crt 文件并对其执行此操作:
openssl x509 -in www.mydomain.com.crt -out www.mydomain.com.cer -outform der
但是,即使在执行此操作并将 .cer 附加到我的应用程序包之后,我仍会在此处收到错误消息:
+ (NSArray *)pinnedPublicKeys {
static NSArray *_pinnedPublicKeys = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSArray *pinnedCertificates = [self pinnedCertificates];
NSMutableArray *publicKeys = [NSMutableArray arrayWithCapacity:[pinnedCertificates count]];
for (NSData *data in pinnedCertificates) {
SecCertificateRef allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)data);
NSParameterAssert(allowedCertificate);
错误出现在最后一行。我想在它尝试分配 allowedCertificate
的前一行中,SecCertificateCreateWithData
具有以下描述:
/*!
@function SecCertificateCreateWithData
@abstract Create a certificate given it's DER representation as a CFData.
@param allocator CFAllocator to allocate the certificate with.
@param certificate DER encoded X.509 certificate.
@result Return NULL if the passed-in data is not a valid DER-encoded
X.509 certificate, return a SecCertificateRef otherwise.
*/
很明显它返回一个 NULL,但我不知道为什么。我的特定证书格式正确。但是,我确实注意到 pinnedCertificates
数组中还有其他“证书”,但我不知道它们是从哪里获得的。我似乎也找不到它们或将它们打印出来。据我所知,我在应用程序包中只有一个,但它似乎显示的不止于此。
最后一行断言产生的错误是:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:allowedCertificate”
最佳答案
假设您正在使用 AFNetworking 2.5,步骤如下:
创建 .cer 文件 openssl x509 -in www_yourdomain_com.crt -out www_yourdomain_com.cer -outform der
将 .cer 文件添加到应用程序项目。重要提示:切勿将私钥添加到您的项目!!!
设置 AFNetworking 安全策略
- (AFSecurityPolicy *)securityPolicy {
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
[securityPolicy setAllowInvalidCertificates:NO];
[securityPolicy setValidatesDomainName:YES];
return securityPolicy;
}
在进行网络调用时设置网络管理员策略
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:[self securityPolicy]];
如果您使用 policyWithPinningMode:pinningMode
方法创建安全策略 AFNetworking 会自动固定它们,则无需手动加载 .cer 文件。
关于ios - 如何为 AFNetworking 创建 .cer 文件以在 iOS 应用程序包中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156170/
有没有人设法通过 AFNetworking 使服务器发送事件 (SSE) 正常工作?我知道 AFURLConnectionOperation 有一个可以附加到的 inputStream 属性,但是 A
在我使用 AFNetworking 发出网络请求之前,有没有办法取消所有网络请求(由另一种方法启动的请求) 我试过如下但不起作用: - (void)sendRequest:(NSUInteger)pa
我同时有一些请求,我想处理直到全部完成。以下是要求: [self getProfileData]; [self checkNewSystemMessage]; [self checkChatMessa
我需要执行一系列按顺序运行的服务器调用,并且只有在所有先前的请求都成功时才能执行一个请求。 所以,我的想法是为每个请求创建一个 AFHTTPRequestOperation 并使用 [myAFHTTP
我正在尝试将 AFNetworking 添加到我的项目中,但我认为我的静态库之一正在使用此框架。我的问题是我该怎么做(将 AFNetworking 添加到我的项目中,最好是不使用 pods)以及我如何
我正在尝试上传一个 NSData,它是使用 AFNetwork 的图像,但出了点问题,我找不到我的错误所在 这是我的代码: NSData *imageData = UIImageJPEGReprese
使用AFNetworking 2.0的应用程序遇到以下问题。 使用AFHTTPRequestOperationManager的GET方法时,出现错误NSURLErrorDomain code -101
你能帮我理解如何使用 UIActivityIndicatorView+AFNetworking 或 UIProgressView+AFNetworking 吗?我是否需要再创建一个 UIViewC
我一直在寻找新的 AFNetworking 2.0 的示例来上传图像。 但是我碰壁了,无法弄清楚代码有什么问题。 所以这是我使用的代码 NSData *imageData = UIImageJPEGR
寻找如何使用 AFHTTPClient 发布 json 的示例.我看到有一个 postPath 方法需要一个 NSDictionary并且 AFJSONEncode 方法返回一个 NSData .是否
在我的项目中,我有 RestKit 和 IDMPhotoBrowser(使用 Cocoapods),所以两个版本 AFNetworking 之间存在冲突。您知道如何在同一个项目中同时使用它们吗? 最佳
我正在尝试为 UIButton 集成 AFNetworking 类(我正在调用配置文件页面并加载异步用户的头像)。 https://gist.github.com/dpettigrew/2925847
我正在尝试将一个项目从 AFNetworking 1.3 迁移到 AFNetworking 2.0。 在 AFNetworking 1.3 项目中,我有以下代码: - (void) downloadJ
我正在使用 AFNetworking 2.0 & 新版本。成功尝试了几个示例 WS 调用。我们已经实现了 Web 服务并被称为: 它的数据参数是加密后的字符串。 请求是:http://demo.XYZ
我正在尝试使用 AFHTTPClient 方法“postPath”将一个参数键的多个值传递给 HTTP 请求。但是,参数变量是 NSDictionary,因此我无法为我的关键“电子邮件”设置多个值。我
当我想停止使用 AFNetworking 构建的同步引擎中的所有当前请求时,我真的遇到了问题。 我有 5 个不同的 URL 可以查询。如果前一个查询被正确执行,则每个查询都会启动。 这非常有效。 我想
我正在制作一个应用程序,它将从网络服务中获取图片资源和文本。我选择了很棒的 AFNetworking 的 UIImageView+AFNetworking 类别来处理图像下载的东西。 但是,我面临着内
我在使用 AFNetworking 时遇到问题代码: #import "SyncProfile.h" #import "AFNetworking.h" @implementation SyncProf
我使用 AFNetworking 作为我的 iPhone 应用程序的网络层,该应用程序连接到使用 Devise 进行身份验证的 Rails 服务器。如果我登录(通过 POST 调用)提供用户名/密码,
iOS 版 AFNetworking 是否提供了缓存失败请求(例如由于没有互联网连接)并在互联网连接恢复时自动重试请求的解决方案。 谢谢,多林 最佳答案 请参阅Network Reachability
我是一名优秀的程序员,十分优秀!