在 iOS/macOS 中使用 Swift 生成证书签名请求 (CSR)。
支持 RSA(密钥大小:512、1024、2048)和安全 Enclave 内部/外部的 EC(iOS 目前仅支持 256 位密钥),以及 SHA1、SHA256 和 SHA512。
支持 RSA(密钥大小:1024、2048)和安全 Enclave 内部/外部的 EC,以及 SHA1、SHA256 和 SHA512。
要使用,请按照以下步骤操作
generateKeysAndStoreInKeychain
函数中找到。String(kSecReturnData): true
从 iOS Keychain 中查询,以位形式获取你的 publicKey。例如//Set block size
let keyBlockSize = SecKeyGetBlockSize(publicKey)
//Ask keychain to provide the publicKey in bits
let query: [String: Any] = [
String(kSecClass): kSecClassKey,
String(kSecAttrKeyType): algorithm.secKeyAttrType,
String(kSecAttrApplicationTag): tagPublic.data(using: .utf8)!,
String(kSecReturnData): true
]
var tempPublicKeyBits:CFTypeRef?
var _ = SecItemCopyMatching(query as CFDictionary, &tempPublicKeyBits)
guard let keyBits = tempPublicKeyBits as? Data else {
return (nil,nil)
}
KeyAlgorithm.ec
或 KeyAlgorithm.rsa
初始化 CertificateSigningRequest
(如何操作的示例可以在测试文件中找到。 以下是三种可能的初始化方式let csr = CertificateSigningRequest() //CSR with no fields, will use defaults of an RSA key with sha512
let algorithm = KeyAlgorithm.ec(signatureType: .sha256)
let csr = CertificateSigningRequest(keyAlgorithm: algorithm) //CSR with a specific key
let csr = CertificateSigningRequest(commonName: String?, organizationName: String?, organizationUnitName: String?, countryName: String?, stateOrProvinceName: String?, localityName: String?, emailAddress: String?, description: String?, keyAlgorithm: algorithm) //Define any field you want in your CSR along with the key algorithm
let builtCSR = csr.buildCSRAndReturnString(publicKeyBits, privateKey: privateKey)
//Or if you want `CertificateSigningRequest` to verify the signature after building, pass in your publicKey to the same method:
let builtCSR = csr.buildCSRAndReturnString(publicKeyBits, privateKey: privateKey, publicKey: publicKey)
let builtCSR = csr.buildAndEncodeDataAsString(publicKeyBits, privateKey: privateKey)
。let builtCSR = csr.build(publicKeyBits, privateKey: privateKey)
。注意
你可以通过运行和设置断点来测试你的 CSR 是否正确测试文件。 你也可以让所有测试运行并测试不同的 CSR。 CSR 的输出将在控制台窗口中打印。 您可以通过打印到控制台来输出 CSR 和您自己的应用程序,并通过将它们粘贴到此处来检查它们是否已正确创建:https://redkestrel.co.uk/products/decoder/ 或使用 openssl。
要运行示例项目,请克隆 repo,然后首先从 Example 目录运行 pod install
。 下面是来自此框架的证书示例
-----BEGIN CERTIFICATE REQUEST-----
MIIBYTCCAQcCAQAwgaQxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJLWTENMAsGA1UE
BwwEVGVzdDENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDEnMCUGA1UEAwwe
Q2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdCBUZXN0MSIwIAYJKoZIhvcNAQkBDBNu
ZXRyZWNvbkBjcy51a3kuZWR1MQ4wDAYDVQQNDAVoZWxsbzBZMBMGByqGSM49AgEG
CCqGSM49AwEHA0IABN5Wp7zEAVkffuqmkC22j3mOCJalTo2Beff23N8Bv7sZ0iTM
AdqeeF+A1fAO5yUwykbTYhAyNiwkT82jtOy09xKgADAKBggqhkjOPQQDAgNIADBF
AiEAt85IAQ9kOptiplqYkLyRz4is/uB4DffNpWuP9EUJY74CIHtjMZ6QRwY1zPGI
bXC5eX6Kpv5QLfvR6xX7Xqaoy6Ai
-----END CERTIFICATE REQUEST-----
你可以在此处测试 CSR 是否创建正确:https://redkestrel.co.uk/products/decoder/
可以通过 SPM 安装 CertificateSigningRequest。 打开现有项目或创建一个新的 Xcode 项目,然后导航到 File > Swift Packages > Add Package Dependency
。 输入 url https://github.com/cbaker6/CertificateSigningRequest.git
并点击 Next
。 选择主分支,然后在下一个屏幕上,勾选该包。
CertificateSigningRequest 可通过 CocoaPods 获得。 要安装它,只需将以下行添加到你的 Podfile
pod 'CertificateSigningRequest'
如果你想将其用作框架,请克隆并构建项目,在框架下查找,然后将 "CertificateSigningRequest.framework" 拖到项目中的 "Frameworks" 部分,"如果需要,选中复制"。
import CertificateSigningRequest
。cbaker6, coreyearleon@icloud.com
CertificateSigningRequest 的组件最初位于 Ales Teska 用 Objective-C 编写的 ios-csr 中,并由 CertificateSigningRequest 的作者移植到 Swift。 因此,CertificateSigningRequest 具有相同的 GPLv2 许可证。 有关更多信息,请参阅 LICENSE 文件。