웹 소켓을 통한 클라이언트 인증서 지원이 필요한 프로젝트 작업 중입니다. 저는 현재 Starscream을 사용하고 있습니다 만, 유감스럽게도 설명서를 읽지는 않았지만이 문제에 대한 지원과 관련된 정보는없는 것으로 보입니다. 몇 가지 다른 빠른 웹 소켓 라이브러리를 둘러 보았지만 아무도이 기능에 대해 언급하지 않았습니다.클라이언트 인증서를 허용하지 않는 스위프트 웹 소켓
이러한 기능을 지원하는 라이브러리를 아는 사람이 있습니까?
모든 정보를 제공해 주시면 감사하겠습니다.
편집 : 그래서 현재이 시도하는 스타 스크림을 사용하고
. 인증서 설치가 완료되었습니다. 여기에 내가 그때 그렇게
let key = SecTrustCopyPublicKey(identityTest!.trust)!;
let ssl = SSLCert(key: key)
socket.security = SSLSecurity(certs: [ssl], usePublicKeys: false)
socket.enabledSSLCipherSuites = [TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]
socket.delegate = self
socket.connect()
같은 소켓을 연결까지
public struct IdentityAndTrust {
public var identityRef:SecIdentity
public var trust:SecTrust
public var certData : Data
}
var socket = WebSocket(url: URL(string: "\(ConstantKeys.ipAddress)")!, protocols: [])
var identityTest : IdentityAndTrust?
func createTrust()
{
do
{
let urlPath = Bundle.main.path(forResource: "client", ofType: "p12")
let url = NSURL.fileURL(withPath: urlPath!)
let certificateData = try Data(contentsOf: url)
identityTest = extractTrustAndIdentity(certData: certificateData, certPassword: ConstantKeys.password)
}
catch
{
print(error)
}
}
func extractTrustAndIdentity(certData:Data, certPassword:String) -> IdentityAndTrust
{
var identityAndTrust:IdentityAndTrust!
var securityError:OSStatus = errSecSuccess
var items: CFArray?
let certOptions: Dictionary = [ kSecImportExportPassphrase as String : certPassword ];
// import certificate to read its entries
securityError = SecPKCS12Import(certData as CFData, certOptions as CFDictionary, &items);
if securityError == errSecSuccess {
let certItems:CFArray = items as CFArray!;
let certItemsArray:Array = certItems as Array
let dict:AnyObject? = certItemsArray.first;
if let certEntry:Dictionary = dict as? Dictionary<String, AnyObject> {
// grab the identity
let identityPointer:AnyObject? = certEntry["identity"];
let secIdentityRef:SecIdentity = identityPointer as! SecIdentity!;
// grab the trust
let trustPointer:AnyObject? = certEntry["trust"];
let trustRef:SecTrust = trustPointer as! SecTrust;
// grab the certificate chain
var certRef: SecCertificate?
SecIdentityCopyCertificate(secIdentityRef, &certRef);
let certArray:NSMutableArray = NSMutableArray();
certArray.add(certRef as SecCertificate!);
identityAndTrust = IdentityAndTrust(identityRef: secIdentityRef, trust: trustRef, certData : certData);
}
}
return identityAndTrust
}
을 시도하고 코드는하지만
CFNetwork에서 SSLHandshake 실패 다음과 같은 오류 메시지 (-9807)
있어TCP 연결 0x604000173980 SSL 핸드 셰이크 실패 (-9807) websocket이 연결이 끊김 : 작업 공동 완료 할 수 없습니다. (OSStatus 오류 -9807.)
내가 HTTPS 요청을 만들기 위해 그것을 사용으로 인증서가 유효 알고 그것을 잘 작동합니다. 왜 작동하지 않는지 아는 사람이 있습니까? 아니면이 문제와 도움이 될 다른 소켓 라이브러리를 아는 사람이 있습니까?
, 나는 alamofire를 사용하고, 나는 아무 문제 SSL 문제를 처리 할 수 없습니다. 내 문제는 순전히 웹 소켓입니다. 내가 본 소켓 라이브러리는 이러한 인증 문제를 처리 할 방법을 제공하지 않습니다. 소켓 로켓은 가능성처럼 보이지만 오래된 라이브러리이며 Objective-c로 작성되었습니다. 나는 신속한 해결책을 원했다. – AdamM