Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSStream与p12证书一起使用_Ios_Swift_Ssl_Nsstream - Fatal编程技术网

Ios 将NSStream与p12证书一起使用

Ios 将NSStream与p12证书一起使用,ios,swift,ssl,nsstream,Ios,Swift,Ssl,Nsstream,我正在使用NSStream/CFStream套接字连接到我的服务器,现在想使用SSL加密。 我有一个自签名的p12文件,但现在我完全不知道如何在我的流中使用它。 我在XCode中导入了p12文件,读取它,将其转换为NSData,并使用此代码读取证书 let path = NSBundle.mainBundle().pathForResource("certificate", ofType: "p12") let certData = NSData(contentsOfFile: path!) l

我正在使用NSStream/CFStream套接字连接到我的服务器,现在想使用SSL加密。 我有一个自签名的p12文件,但现在我完全不知道如何在我的流中使用它。 我在XCode中导入了p12文件,读取它,将其转换为NSData,并使用此代码读取证书

let path = NSBundle.mainBundle().pathForResource("certificate", ofType: "p12")
let certData = NSData(contentsOfFile: path!)
let passDictionary:NSMutableDictionary = NSMutableDictionary()
passDictionary.setValue("passphrase", forKey: kSecImportExportPassphrase as String)
var items: CFArray?
let error = SecPKCS12Import(certData!, passDictionary, &items)
但我现在不知道该怎么办

我试着像这样在我的流中使用它

inputStream!.setProperty(NSStreamSocketSecurityLevelNegotiatedSSL, forKey:NSStreamSocketSecurityLevelKey)
outputStream!.setProperty(NSStreamSocketSecurityLevelNegotiatedSSL, forKey: NSStreamSocketSecurityLevelKey)
inputStream!.setProperty(items, forKey: kCFStreamSSLCertificates as String)
outputStream!.setProperty(items, forKey: kCFStreamSSLCertificates as String)
但当我尝试连接时,会收到错误代码9807。如何正确提取证书并告诉我的应用程序信任它们

更新:

我将上述代码更改为:

let path = NSBundle.mainBundle().pathForResource("CERTNAME", ofType: "p12")
let certData = NSData(contentsOfFile: path!)
let passDictionary:NSMutableDictionary = NSMutableDictionary()
passDictionary.setValue("meetsapp", forKey: kSecImportExportPassphrase as String)
var items: CFArray?
let error = SecPKCS12Import(certData!, passDictionary, &items)
let unwrappedItems = items! as [AnyObject]
let certDict = unwrappedItems[0] as! [String:AnyObject]
var certs = [certDict["identity"]!]
for c in certDict["chain"]! as! [AnyObject]
{
    certs.append(c as! SecCertificateRef)
}
items = certs
如果我打印“项目”,它看起来像这样:

[<SecIdentityRef: 0x7faa834d9930>, <cert(0x7faa834d4860) s: CERTNAME i: CA-NAME>, <cert(0x7faa8585ea00) s: CA-NAME i: CA-NAME>]
[,]
这是属性KCFStreamSlCertificates所需的格式,如果我没有错,但仍然得到相同的错误代码。我假设我的应用程序存在信任问题,但如何解决这些问题