Alamofire
証明書と公開鍵を使用して固定することができます(ただし、バンドルから公開鍵を取得する機能はバンドル内の証明書から鍵を取得します)。Swift 3:SHA256ハッシュ文字列をSecCertificateに変換する
私は、公開鍵が証明書から抽出されたときにピン留め作業をすることができていますが、ピニングが、私は、公開鍵としてSHA256
String
を供給したときに(私はAPI呼び出しからキー文字列を受け取る失敗し、その最初のピニングが失敗した場合、公開鍵として使用されることを想定している。)私は
let serverTrustPolicies: [String: ServerTrustPolicy] = [
destinationURL!: .pinPublicKeys(
publicKeys:savePublicKeys(),
validateCertificateChain:true,
validateHost:true
)]
self.manager = SessionManager(
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))
//取得[SecKey]
//作成し、サーバーの信頼ポリシーに文字列を変換するには、以下のコードを使用します[SecKey]
私が間違っているつもりですfunc insertPublicKey(publicTag: String, data: Data) -> SecKey? {
let query: Dictionary<String, AnyObject> = [
String(kSecAttrKeyType): kSecAttrKeyClassPublic,
String(kSecClass): kSecClassKey as CFString,
String(kSecAttrApplicationTag): publicTag as CFString,
String(kSecValueData): data as CFData,
String(kSecReturnPersistentRef): true as CFBoolean]
var persistentRef: AnyObject?
let status = SecItemAdd(query as CFDictionary, &persistentRef)
if status != noErr && status != errSecDuplicateItem {
return nil
}
return obtainKey(tag: publicTag)
}
func obtainKey(tag: String) -> SecKey? {
var keyRef: AnyObject?
let query: Dictionary<String, AnyObject> = [
String(kSecAttrKeyType): kSecAttrKeyClassPublic,
String(kSecReturnRef): kCFBooleanTrue as CFBoolean,
String(kSecClass): kSecClassKey as CFString,
String(kSecAttrApplicationTag): tag as CFString,
String(kSecReturnPersistentRef): true as CFBoolean
]
let status = SecItemCopyMatching(query as CFDictionary, &keyRef)
switch status {
case noErr:
if let ref = keyRef {
return (ref as! SecKey)
}
default:
break
}
return nil
}
キーチェーンデータを挿入して取得するための0
func savePublicKeys() -> [SecKey]
{
var key:SecKey?
var publicKeys:[SecKey] = []
//Check and use if backup key is received from beacon call
if(KeychainService().checkIfKeyExists(tag: "backupURL"))
{
key = KeychainService().obtainKey(tag: backupURLKey)
publicKeys.append(key!)
}
return publicKeys
}
//関数?私が知っているから、私が使用するString
はbase64encoded
であり、Androidの部分で動作します。
これは答えが難しい理由についての基本的な説明を追加しました。私は人々にハッシュとセキュリティについて知らされたいと思っていますが、これは暗号と数学について議論に転じるかもしれません。司会者が正しいと感じるならば、この質問をロックすることができます。 – SagarU