- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
目前我正在我的 iOS 应用程序中成功生成一个椭圆曲线 key 对:
let privateKeyParams: [String: Any] = [
kSecAttrIsPermanent as String: true,
kSecAttrApplicationTag as String: privateTag
]
let publicKeyParams: [String: Any] = [
kSecAttrIsPermanent as String: true,
kSecAttrApplicationTag as String: publicTag,
kSecAttrAccessible as String: kSecAttrAccessibleAlways
]
let query: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,
kSecPrivateKeyAttrs as String: privateKeyParams,
kSecPublicKeyAttrs as String: publicKeyParams,
kSecAttrKeySizeInBits as String: 256 as AnyObject,
]
let status = SecKeyGeneratePair(query as CFDictionary, &self.publicKey, &self.privateKey)
guard status == errSecSuccess else {
print("Could not generate keypair")
return
}
guard let pubKey = self.publicKey, let privKey = self.privateKey else {
print("Keypair null")
return
}
这个之所以有效,是因为当我检查我的 key 是否存在时,我也可以加密/解密和签名/验证。
Soo.. 在下一步中,我需要生成一个 SecCertificate,它将基本上保存我的公钥...这只是一个要求。
但是实际上没有关于如何执行此操作的 API/文档..我看到的唯一 api 是关于如何从现有的 der 文件等生成 SecCertificate.
所以我的问题是:
如何从现有的椭圆曲线 key 对 (SecKey) 生成 SecCertificate 对象?
谢谢和问候!
最佳答案
一般而言,证书和加密函数的文档非常糟糕,在 Swift/iOS 中几乎不支持。
但这里的第一个问题是:为什么需要证书,你想做什么?主要问题是您无法凭空创建有效证书。证书必须由证书颁发机构 (CA) 签名,以便拥有 CA 证书的任何人都可以验证证书是否有效。
(当然,您可以创建一个自签名证书,但在大多数情况下这将毫无用处。此外,我不知道如何轻松地做到这一点。Swift/iOS 中的所有 API 调用都假定您已经拥有有效证书。它似乎并不打算在您的应用程序中创建证书。)
所以首先,您需要一个证书颁发机构,它可以签署您的证书。然后,您需要从您的 key 对创建证书签名请求并将其发送给您的 CA。然后您将获得一个签名证书,您可以在您的应用程序中使用它。正确顺序的步骤是:
SecIdentity
或 SecCertificate
这是一项繁重的工作,但经过长时间的研究,这是我获得在 Swift/iOS 中工作的证书的唯一方法。尤其是 OpenSSL 的处理非常棘手(查看 this post of me 以了解其复杂性)。所以,问题又是你想做什么。如果你想创建一个 SSL 客户端,你需要走完整的路,但如果你只是想加密一些东西,解决方案可能会容易得多。
关于Swift 3/4 - 从椭圆曲线 key 对生成 SecCertificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49408289/
需要解析和比较证书值,但其中一些以 Data 形式返回,而不会解析为字符串。大多数属性以数字或字符串形式返回,但 kSecPropertyKeyValue 是 CFData 数组。需要此功能来显示与钥
我正在尝试执行 https 请求,但是当我尝试匹配本地和远程 ssl 证书时,Xcode 向我显示了上述错误。我在下面附上了一张错误图片和代码,如果有任何帮助,我们将不胜感激。 下面是URLSessi
目前我正在我的 iOS 应用程序中成功生成一个椭圆曲线 key 对: let privateKeyParams: [String: Any] = [ kSecAttrIsPermanent a
Alamofire 允许使用证书和公钥固定(尽管从包中获取公钥的函数从包中的证书中获取 key )。 当从证书中提取公钥时,我能够进行固定,但是当我提供 SHA256 String 作为公钥(我从 a
我需要从证书中获取公钥 我找到了在 iOS 12+ 和 iOS 10.3+ 上执行此操作的方法,但如何在 iOS 10.0+ 上执行此操作? func publicKey(for certif
我是一名优秀的程序员,十分优秀!