私はWebSocketでクライアント証明書をサポートするプロジェクトを進めています。私は現在Starscreamを使用していますが、残念なことにドキュメンテーションを読むことから、これに関するサポートに関する情報はないようです。私は他のいくつかの素早いWebソケットライブラリを見てきましたが、どれもこれをサポートしているとは言いません。クライアント証明書を受け付けていないスウィフトWebソケット
このような機能をサポートするライブラリを知っている人はいますか?
情報があれば幸いです。
編集:
私は現在、これを試すためにスタークリームを使用しています。証明書の設定があります。ここで私は、私はそのように
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 Conn 0x604000173980 SSLハンドシェイクが失敗しました(-9807)websocketが disconnected: uldnは完了されません。 (OSStatusエラー -9807)
私はhttps要求を行うために使用するので、証明書が有効であり、正常に動作することがわかります。だから誰もそれが動作していない理由を知っていますか?あるいは、誰かがこの問題に役立つ別のソケットライブラリを知っていますか?
は、私がalamofireを使用して、私は何の問題SSLの問題を処理することはできません。私の問題は純粋にウェブソケットです。私が見たソケットライブラリは、これらの認証の問題を処理する方法を提供していません.SocketRocketは可能性のようですが、これは古いライブラリであり、Objective-cで書かれています。私はSwiftソリューションを望んでいた – AdamM