OS X Keychain访问SSL握手提示



我正在尝试在服务器模式下使用SSL实现套接字安全。使用的证书需要自签名,以编程方式生成一次并存储到Keychain中。

对于套接字功能,我使用CocoaAsyncSocket (https://github.com/robbiehanson/CocoaAsyncSocket),它在内部使用SSLContext和本地安全框架的相关内容。对于自签名证书生成,我使用MyUtilities (https://github.com/snej/MYUtilities/blob/master/MYAnonymousIdentity.h)中的MYGetOrCreateAnonymousIdentity函数

swift中保护连接的代码如下:

var error: NSError? = nil
if let identity = MYGetOrCreateAnonymousIdentity("MyIdentity", 60.0 * 60.0 * 24.0 * 365.0 * 10.0, &error)?.takeUnretainedValue() {
    var certificateOpt: SecCertificate? = nil
    SecIdentityCopyCertificate(identity, &certificateOpt)
    // Secure the socket
    let settings: [String:NSObject] = [
        kCFStreamSSLCertificates as String: self.sslCertificates as NSArray,
        kCFStreamSSLIsServer as String: NSNumber(value: true)
    ]
    socket.startTLS(settings)
}
else {
    Swift.print("Failed to get certificates for SSL: (error)")
    return nil
}

代码似乎工作良好:自签名证书被创建并保存在Keychain中,套接字上的安全通信似乎也工作正常。

问题是在SSL握手期间(在SSLHandshake函数中的某个地方)显示Keychain提示,要求允许使用密钥"<key>"进行签名。通过查看Keychain, "<key>"密钥似乎是其他密钥,而不是我的程序创建的密钥。

那么为什么这里使用"<key>"键,我如何避免提示显示给用户?

嗯,经过一些玩弄,删除和重新创建证书的问题似乎消失了。可能Keychain中的证书以某种方式被破坏或配置错误

相关内容

  • 没有找到相关文章

最新更新