Swift-iOS-Client-Zertifikat-Authentifizierung
Den web service, den ich konsumieren wollen, erfordert ein Clientzertifikat. Wie kann ich mein Zertifikat?
Näher ich verstehe nicht, wie die SecIdentityRef
.
In meinem NSURLConnection
didReceiveAuthenticationChallenge
ich habe dies bedingte nach ServerTrust
:
else if challenge?.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate
{
var secIdent : SecIdentityRef = ?????????
var certCred = NSURLCredential(identity: secIdent, certificates: [getClientCertificate()], persistence: NSURLCredentialPersistence.Permanent)
challenge?.sender.useCredential(certCred, forAuthenticationChallenge: challenge!)
}
Den getClientCertificate
Methode:
func getClientCertificate() -> SecCertificateRef
{
let mainBundle : NSBundle = NSBundle.mainBundle()
var mainBund = mainBundle.pathForResource("iosClientCert", ofType: "cer") //exported the cert in der format.
var key : NSData = NSData(contentsOfFile: mainBund!)!
var turnToCert : SecCertificateRef = SecCertificateCreateWithData(kCFAllocatorDefault, key).takeRetainedValue()
return turnToCert;
}
Vielen Dank für die bounty @EpicPandaForce
Wir liefen in das gleiche problem, aber wir arbeiten noch daran... --- wir würden wahrscheinlich um einen direkten port von der folgenden Lösung stackoverflow.com/a/27012819/2413303 zugänglich sind, Swift, obwohl.
Ich hatte die app in einer Testphase, so musste ich wechseln, es zu benutzen auth mit tokens usw. Ich werden Neubetrachtung dies so schnell wie ich kann. Ich ging fast den bridging-header-route und implementiert den http-client in obj-c... aber ich hatte keine Zeit für, entweder.
"Ruf aus EpicPandaForce endet in 22 Stunden" bla
.cer ist ein einfaches exportieren, das keine Tasten. Wie wir sind gonna Anhängen, dies in der Anfrage Zeit. Jemand dieses Problem gelöst ?
Wir liefen in das gleiche problem, aber wir arbeiten noch daran... --- wir würden wahrscheinlich um einen direkten port von der folgenden Lösung stackoverflow.com/a/27012819/2413303 zugänglich sind, Swift, obwohl.
Ich hatte die app in einer Testphase, so musste ich wechseln, es zu benutzen auth mit tokens usw. Ich werden Neubetrachtung dies so schnell wie ich kann. Ich ging fast den bridging-header-route und implementiert den http-client in obj-c... aber ich hatte keine Zeit für, entweder.
"Ruf aus EpicPandaForce endet in 22 Stunden" bla
.cer ist ein einfaches exportieren, das keine Tasten. Wie wir sind gonna Anhängen, dies in der Anfrage Zeit. Jemand dieses Problem gelöst ?
InformationsquelleAutor sk1tt1sh | 2015-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Technisch, wenn jemand den ich kenne, benötigt die Implementierung in Swift, er verwendet die folgenden Objective-C-Implementierung, um die NSURLCredential-Objekt, um die Verbindung; basierend auf dem privaten Schlüssel und X. 509-Zertifikat-pair-Mädchen, die in einen PKCS12-keystore.
Sorry, ich habe keinen Zugriff auf die Quelle mit dem Swift-Lösung. Alles was ich weiß ist, dass die NSURLCredential zurückgegeben wurde, um rasch und direkt in die http-url-Verbindung gibt. Es ist ähnlich wie diese, aber.
Bin ich nicht ein iOS-dev, damit ich nicht in der Lage sein, um Ihnen zu helfen mit dem "bridging " Swift" Teil.
EDIT: Har har, sehr lustig, downvoting mir zweimal, wenn Sie sich nicht die Mühe, während die bounty war. *grummel *
Sowieso, verwenden Sie die folgende vor, die Sie gerade brauchen, um es von Swift.
Verwendet.
EDIT: EINE schnelle version der oben genannten ist hier, obwohl es war chaotisch genug, dass wir lieber nur noch nicht genutzt.
Sorry, über die Obj-C-code, den ich wirklich nicht haben Zugang zu den Swift-bridging. Welchen Teil meinst du mit "öffentlich & privat" hier?
Ich meine, der Schlüssel zu PKCS das heißt, es müssen die öffentlichen und privaten Schlüssel des cert. In anderen Sprachen habe ich in der Lage zu verwenden .cer-Datei, die nur einen direkten export ohne den privaten Schlüssel und erfordert nicht die cert-Passwort. Nicht eine große Sache, da haben wir ein CA-signiertes Zertifikat, aber es ist ein wenig seltsam für mich, dass es auf diese Weise.
Auch technisch ist dies, wie es gemacht wurde in Java und ein Freund, der hier gelungen ansehen, die ganze Sache habe ich mit BouncyCastle zu, die OpenSSL verwenden, auf iOS. Aber um client-Authentifizierung arbeiten, Sie müssen sowohl ein privater Schlüssel und ein öffentlicher Schlüssel; denn Dinge, die Sie verschlüsseln mit dem öffentlichen Schlüssel des Empfängers und verschlüsselt Sie mit eurem öffentlichen Schlüssel; aber zu entschlüsseln, müssen Sie Ihren privaten Schlüssel, die gespeichert werden in einem keystore. Importiert in die
SecPKCS12Import
Ruf zu haben, sowohl für die SSL-Verbindung. Client-auth ist Magie, und es ist seltsam, es gibt nichts über es überall.So bekam ich Zugang zu den Swift-code, und fügte hinzu, ein Teil von ihm. Ich bin mir nicht löschen meine Antwort, nur weil einige Leute, die haben null Ahnung von client-auth fühlte mich wie barging in Sie hier und handeln alle smart-und downvotes geben.
InformationsquelleAutor EpicPandaForce
Findet in diesem Kern der Swift3 arbeiten Umsetzung :
https://gist.github.com/celian-m/8da09ad293507940a0081507f057def5
InformationsquelleAutor CZ54
In Reaktion auf die Authentifizierung Herausforderung, die Sie brauchen, zu extrahieren, die Identität von Ihr client-Zertifikat.
In
NSURLSessionDelegate
reagieren, um die Authentifizierung Herausforderung wie diese:vielen Dank, aber jede chance, könntest du ein Beispiel geben wie dies zu nutzen?
InformationsquelleAutor Bins Ich
Ich bin mit der letzten xcode und swift version, und dieser code funktioniert für mich, über ein client-Zertifikat .pfx, basiert auf Ich Bins Antwort:
Ich bekomme Zertifikatkette verwenden lassen chainPointer:AnyObject? = certEntry["Satz"]; lassen chainRef:SecCertificateRef = chainPointer als! SecCertificateRef; lassen certArray:CFArrayRef = chainRef als! CFArrayRef
InformationsquelleAutor Jose Sanchez