背景:私はOpenSSLライブラリを使用してSwiftにPKCS12ファイルを作成しています。 Keychainに証明書と秘密鍵が格納されています。UnsafeMutablePointerからData/NSDataを構築する方法<T>
問題:PKCS12ファイルを作成してアプリケーションバンドルに正常に保存できました。 PKCS12ファイル(HTTPSサーバーからの認証チャレンジの受信など)を使用する場合は、Appleが提供するSecPKCS12Import()
機能を使用してファイルを読み込むことができます。さて、物理的なファイルを生成するのではなく、私が必要なときに飛行中にPKCS12オブジェクトを生成したいのです。それはメモリに保存されます。私はSwiftを初めて使うので、UnsafeMutablePointerからDataに変換するための助けを求めています。以前、私は私のcreateP12
機能として実装されている
:
createP12(pemCert: String, pemPK: String) {
// .......
// Code to load certificate and private key Object..
guard let p12 = PKCS12_create(passPhrase, name, privateKey, certificate, nil, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 0, 0, 0) else {
ERR_print_errors_fp(stderr)
return
}
// Save p12 to file
let fileManager = FileManager.default
let tempDirectory = NSTemporaryDirectory() as NSString
let path = tempDirectory.appendingPathComponent("ssl.p12")
fileManager.createFile(atPath: path, contents: nil, attributes: nil)
guard let fileHandle = FileHandle(forWritingAtPath: path) else {
LogUtils.logError("Cannot open file handle: \(path)")
return
}
let p12File = fdopen(fileHandle.fileDescriptor, "w")
i2d_PKCS12_fp(p12File, p12)
fclose(p12File)
fileHandle.closeFile()
}
私がP12ファイルを読みたいときに、私は
let p12Data = NSData(contentsOfFile: Bundle.main.path(forResource: mainBundleResource, ofType:resourceType)!)! as Data
var items: CFArray?
let certOptions: NSDictionary = [kSecImportExportPassphrase as NSString: passwordStr as NSString]
self.securityError = SecPKCS12Import(p12Data as NSData, certOptions, &items)
// Code to read attributes
を呼び出すことができますあなたは私の次のコードを読むときに、より理解する
createP12()
ファンクションから、私はまずUnsafeMutablePointer<PKCS12>
のタイプのp12オブジェクトを取得し、それをファイルに格納します。代わりに、今私はpkcs12リーダー関数に直接p12を渡したいと思います。これを行うには、まず、SecPKCS12Import()
関数が必要とするので、p12オブジェクトをData/NSDataオブジェクトに変換する必要があります。
私は、UnsafaMutablePointer<PKCS12>
のタイプのp12オブジェクトからData/NSDataオブジェクトを作成する方法を教えてください。SecPKCS12Import()
に渡すことができますか?
ありがとう!それは完璧に動作します!私はBIO_newを使用してバッファを作成することを考えましたが、cntを取得する方法とデータを構築する方法を理解できませんでした。とにかく、あなたの親切な助けをありがとう! –