gpt4 book ai didi

ios - 无法在 AFNetworking 2 中使用自签名证书

转载 作者:可可西里 更新时间:2023-11-01 06:23:18 24 4
gpt4 key购买 nike

我把Apache Server使用的.cer证书放到了Xcode工程中。当应用程序尝试与服务器通信时,我在 Xcode 中收到此错误:

Assertion failure in id AFPublicKeyForCertificate(NSData *__strong)(),
/Users/../ProjectName/AFNetworking/AFSecurityPolicy.m:52
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Invalid parameter not satisfying: allowedCertificate'

这是调用服务器的代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[self setSecurityPolicy:[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]];
[manager POST:@"https://www.example.com/" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
//success
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//failure
}];

我将固定模式更改为 AFSSLPinningModeCertificate 但没有成功。

当我删除这一行时:

[self setSecurityPolicy:[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]];

服务器响应错误信息:

"The operation couldn't be completed. (NSURLErrorDomain error -1012.)"

证书是使用 OpenSSL 创建的,我什至尝试了 StartSSL.com 的免费证书

至于Apache Server端,这里是虚拟主机配置:

# My custom host
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot "/path/to/folder"
SSLEngine on
SSLCipherSuite HIGH:!aNULL:!MD5
SSLCertificateFile /path/to/www.example.com.cer
SSLCertificateKeyFile /path/to/www.example.com.key
<Directory "/the/directory/">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/mysite.local-error_log"
</VirtualHost>

并且服务器确实监听了443端口

最佳答案

您的证书文件格式似乎不正确。您的代码在这些行 (AFURLConnectionOperation/pinnedPublicKeys) 失败:

SecCertificateRef allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)data);
NSParameterAssert(allowedCertificate);

我有同样的错误(在 AFNetworking 1.1 上,但版本应该无关紧要),当我的证书看起来像这样时:

-----BEGIN CERTIFICATE-----
..
-----END CERTIFICATE-----

我设法通过使用来自 this answer 的命令将证书转换为 x509 格式来解决此问题:

openssl x509 -in adn.crt -outform der -out "adn.der"

之后我将 adn.der 重命名为 adn.cer('.cer' 似乎是 AFNetworking 的预期扩展名),现在一切正常。

关于ios - 无法在 AFNetworking 2 中使用自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com