2016-09-07 1 views
0

Ich versuche, einen Socket mit SSL im Server-Modus gesichert zu implementieren. Das verwendete Zertifikat muss selbstsigniert sein, einmal programmgesteuert generiert und im Schlüsselbund gespeichert werden.OS X Schlüsselbund Zugriffsaufforderung auf SSL-Handshake

Für Socket-Funktionalität verwende ich CocoaAsyncSocket (https://github.com/robbiehanson/CocoaAsyncSocket), die intern SSLContext und verwandte Sachen aus nativen Sicherheit Framework verwendet. Für selbst signiertes Zertifikat Generation verwenden I MYGetOrCreateAnonymousIdentity Funktion von MyUtilities (https://github.com/snej/MYUtilities/blob/master/MYAnonymousIdentity.h)

Der Code der Verbindung in schnellen wie folgt aussieht Sicherung:

scheint
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 
} 

Der Code zu funktionieren: Zertifikat selbstsignierten erstellt und gespeichert im Schlüsselbund, die gesicherte Kommunikation über den Socket scheint auch in Ordnung zu sein.

Das Problem ist, dass während SSL-Handshake (irgendwo innerhalb der SSLHandshake-Funktion) eine Schlüsselbund-Eingabeaufforderung angezeigt wird, die um Erlaubnis bittet, den Schlüssel "<key>" zum Signieren zu verwenden. Wenn Sie in den Schlüsselbund schauen, scheint der Schlüssel "<key>" ein anderer Schlüssel zu sein und nicht der, der von meinem Programm erstellt wurde.

Warum wird hier der Schlüssel "<key>" verwendet und wie kann ich vermeiden, dass dem Benutzer die Eingabeaufforderung angezeigt wird?

Antwort

0

Hmm, nach einigem Herumspielen, Löschen und Neuerstellen von Zertifikaten scheint das Problem weg zu sein. Wahrscheinlich wurden die Zertifikate im Schlüsselbund irgendwie kaputt oder falsch konfiguriert