gpt4 book ai didi

ios - SSL Socket 连接 iOS

转载 作者:可可西里 更新时间:2023-11-01 03:11:31 27 4
gpt4 key购买 nike

我正在尝试建立一个到 java run SSLServerSocket 的安全连接。

我已经创建了自己的根 CA,并且已经签署了使用该证书的 Java SSLServerSocket 的证书。

我想将此根证书添加到我的应用程序,以便根证书签名的任何证书都可以使用。

到目前为止,通过将读写流属性设置为此,我的安全连接工作正常:

NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
(id)kCFStreamSocketSecurityLevelNegotiatedSSL, kCFStreamPropertySocketSecurityLevel,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredRoots,
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,nil];

我像这样将证书添加到钥匙串(keychain):

-(void)addRootCert{
NSString* rootCertPath = [[NSBundle mainBundle] pathForResource:@"rootCA" ofType:@"der"];
NSData* rootCertData = [NSData dataWithContentsOfFile:rootCertPath];

OSStatus err = noErr;
SecCertificateRef rootCert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)rootCertData);
NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:(__bridge_transfer id)kSecClassCertificate, kSecClass, rootCert, kSecValueRef, nil];

err = SecItemAdd((__bridge CFDictionaryRef) dict, NULL);
if (err == noErr) {
NSLog(@"Sucessfully added root certificate");
}else if (err == errSecDuplicateItem){
NSLog(@"Root certificate already exists");
}else{
NSLog(@"Root certificate add failed");
}
}

这很好,但我想验证证书链,以便我的应用程序只接受由我的 CA(或默认的受信任的)签名的证书

我该怎么做?

如果我将 kCFStreamSSLValidatesCertificateChain 设置为 yes,我会得到错误:CFNetwork SSLHandshake failed (-9807) 但如果不是,谁签署服务器并不重要证书,无论如何它都会连接(我认为是对的?)

谢谢!

最佳答案

Technote 2232 ,《HTTPS服务器信任评估》,应该有你需要的所有答案。有关如何评估服务器信任的文档和几个示例。

关于ios - SSL Socket 连接 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232228/

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