Nsurlsession 使用crt和pem进行身份验证挑战NSURLAuthenticationMethodClientCertificate

Nsurlsession 使用crt和pem进行身份验证挑战NSURLAuthenticationMethodClientCertificate,nsurlsession,ios14,authenticationchallenge,Nsurlsession,Ios14,Authenticationchallenge,我需要在iOS 14上实现身份验证挑战,我得到了一个crt和一个pem文件形式的私钥 我确实知道如何用它创建一个SecKey和SecCertificate,但对于挑战,我需要一个SecIdentity: public init(标识:SecIdentity,证书certary:[Any]?,持久性:URLCredential.persistence) 如何做到这一点 我还试图从这两个文件中生成一个.p12,然后通过SecPKCS12Import导入该文件,以从中获取身份和证书,但仍然不起作用。当

我需要在iOS 14上实现身份验证挑战,我得到了一个crt和一个pem文件形式的私钥

我确实知道如何用它创建一个
SecKey
SecCertificate
,但对于挑战,我需要一个
SecIdentity

public init(标识:SecIdentity,证书certary:[Any]?,持久性:URLCredential.persistence)

如何做到这一点

我还试图从这两个文件中生成一个
.p12
,然后通过
SecPKCS12Import
导入该文件,以从中获取身份和证书,但仍然不起作用。当尝试做< /P>时,有什么特别的事情需要考虑吗?
URLCredential(identity: ..., certificates: [myCertificate], persistence: .none)
这是我获取发送到服务器的证书和标识的方式:

    var certificateRef: SecCertificate? = nil

    var items : CFArray?

    let securityError: OSStatus = SecPKCS12Import(decodedData, [kSecImportExportPassphrase as NSString : psswd] as CFDictionary, &items)

    let theArray: CFArray = items!
    if securityError == noErr && CFArrayGetCount(theArray) > 0 {
        let newArray = theArray as [AnyObject] as NSArray
        let dictionary = newArray.object(at: 0)
        let secIdentity = (dictionary as AnyObject)[kSecImportItemIdentity as String] as! SecIdentity
        let securityError = SecIdentityCopyCertificate(secIdentity , &certificateRef)
        if securityError != noErr {
            certificateRef = nil
        }
        return secIdentity
    }

看这回答了你的问题吗?