gpt4 book ai didi

ios - iOS 中的证书固定

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:57 25 4
gpt4 key购买 nike

如何通过硬编码将 SSL 证书(DER 格式)固定在 iOS 中?

例如,目前您可以使用如下内容:

NSData *mydata = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] 
URLForResource:@"mycert" withExtension:@"cer"]];

然后通过NSData提供的方法获取证书byteslength

是否可以将其存储为 char 数组?

我问这个是因为如果您将证书文件存储在 bundle 中,那么任何人都可以将其换成另一个证书。

最佳答案

这是可能的。一种方法是像您所做的那样临时导入证书:

NSData *mydata = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"mycert" withExtension:@"cer"]];

然后简单地将其注销:

NSLog(@"%@",myData);

这将输出一些由 < 和 > 符号括起来的长字符串。

NSData 对象的示例输出:

<6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8>

复制此输出并将其硬编码到您的 .m 文件的顶部。这样它将被编译成非人类可读的代码。

这里有一个方法可以做到这一点:

#define CERT_DATA @"<6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8
6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8 6j5434 34j320 29dmr4 dj28d8>"

下一部分是使该方法起作用的关键。您必须将 NSData 的字符串表示形式转换回 NSData

这里有一个方法可以做到这一点:

-(void)yourMethodThatNeedsCertData
{
NSData *certData = [self dataFromHexString:[[[CERT_DATA stringByReplacingOccurrencesOfString:@"<" withString:@""]stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""]];
}

- (NSData *)dataFromHexString:(NSString *)string
{
// Converts the NSData string representation back into NSData object
const char *chars = [string UTF8String];
int i = 0, len = string.length;

NSMutableData *data = [NSMutableData dataWithCapacity:len / 2];
char byteChars[3] = {'\0','\0','\0'};
unsigned long wholeByte;

while (i < len)
{
byteChars[0] = chars[i++];
byteChars[1] = chars[i++];
wholeByte = strtoul(byteChars, NULL, 16);
[data appendBytes:&wholeByte length:1];
}
return data;
}

请注意,您必须通过删除所有空格和“<”“>”字符来“清理”NSData 字符串 CERT_DATA。祝您好运,希望对您有所帮助!

关于ios - iOS 中的证书固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18638807/

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