证书签名请求 (CertificateSigningRequest)

Documentation CI Status Codecov Pod License

在 iOS/macOS 中使用 Swift 生成证书签名请求 (CSR)。

iOS

支持 RSA(密钥大小:512、1024、2048)和安全 Enclave 内部/外部的 EC(iOS 目前仅支持 256 位密钥),以及 SHA1、SHA256 和 SHA512。

macOS

支持 RSA(密钥大小:1024、2048)和安全 Enclave 内部/外部的 EC,以及 SHA1、SHA256 和 SHA512。

用法

要使用,请按照以下步骤操作

  1. 生成你的 publicKey/privateKey 对。这可以在 iOS 中使用 Keychain 完成。 一个示例可以在测试文件中的 generateKeysAndStoreInKeychain 函数中找到。
  2. 通过在查询中使用 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)
}
  1. 使用 KeyAlgorithm.ecKeyAlgorithm.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
  1. 然后只需使用你的 publicKey(bits) 和 privateKey 构建你的 CSR,使用
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)

注意

你可以通过运行和设置断点来测试你的 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/

要求

安装

Swift 包管理器 (SPM) - 选项 1

可以通过 SPM 安装 CertificateSigningRequest。 打开现有项目或创建一个新的 Xcode 项目,然后导航到 File > Swift Packages > Add Package Dependency。 输入 url https://github.com/cbaker6/CertificateSigningRequest.git 并点击 Next。 选择主分支,然后在下一个屏幕上,勾选该包。

Cocoapods - 选项 2

CertificateSigningRequest 可通过 CocoaPods 获得。 要安装它,只需将以下行添加到你的 Podfile

pod 'CertificateSigningRequest'

嵌入式框架 - 选项 3

如果你想将其用作框架,请克隆并构建项目,在框架下查找,然后将 "CertificateSigningRequest.framework" 拖到项目中的 "Frameworks" 部分,"如果需要,选中复制"。

作者

cbaker6, coreyearleon@icloud.com

许可证

CertificateSigningRequest 的组件最初位于 Ales Teska 用 Objective-C 编写的 ios-csr 中,并由 CertificateSigningRequest 的作者移植到 Swift。 因此,CertificateSigningRequest 具有相同的 GPLv2 许可证。 有关更多信息,请参阅 LICENSE 文件。