CertificateSigningRequest
使用 Swift 在 iOS/macOS 中生成证书签名请求 (CSR)。
iOS
支持 RSA (密钥大小:512,1024,2048) 和 EC 在/外部安全区域(iOS 目前仅支持 256 位密钥),SHA1,SHA256 和 SHA512。
macOS
支持 RSA (密钥大小:1024,2048) 和 EC 在/外部安全区域,SHA1,SHA256 和 SHA512。
使用
使用步骤如下
- 生成你的公钥/私钥对。这可以使用iOS中的Keychain完成。一个示例可以在测试文件中的
generateKeysAndStoreInKeychain
函数中找到。 - 通过在查询中使用
String(kSecReturnData): true
来从iOS keychain查询以获取你的公钥位数。例如
//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
- 然后简单地使用公钥(位数)和私钥构建你的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,请使用:
let builtCSR = csr.buildAndEncodeDataAsString(publicKeyBits, privateKey: privateKey)
。 - 若要以Data形式获取CSR,请使用:
let builtCSR = csr.build(publicKeyBits, privateKey: privateKey)
。
注意
您可以通过运行测试文件并进行断点设置来测试您的CSRs是否正确,测试文件链接为:这里。您还可以让所有测试运行并测试不同CSR。CSR的输出将打印在控制台窗口中。您可以通过将它们打印到控制台,并将它们粘贴到以下链接或在openssl中使用来检查它们是否正确创建:[https://redkestrel.co.uk/products/decoder/](https://redkestrel.co.uk/products/decoder/)
示例
要运行示例项目,请克隆仓库,然后先从示例目录运行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/
需求
- iOS 10+
- mac OS 10.13+
安装
Swift包管理器(SPM)- 选项1
CertificateSigningRequest可以通过SPM进行安装。打开一个现有项目或创建一个新的Xcode项目,导航到 文件 > Swift包 > 添加包依赖
。输入URL https://github.com/cbaker6/CertificateSigningRequest.git
并点击 下一步
。选择主分支,然后在下一屏上勾选该包。
Cocoapods - 选项2
CertificateSigningRequest可通过CocoaPods获取。要安装它,只需将以下行添加到你的Podfile中
pod 'CertificateSigningRequest'
嵌入式框架 - 选项3
如果您想将其作为框架使用,请克隆并构建项目,在“框架”下查找,并将“CertificateSigningRequest.framework”拖入项目中的“框架”部分,“如有需要则选择复制”。
- 在项目目标中,点击“常规”,确保“CertificateSigningRequest.framework”在“嵌入式二进制文件”下显示,它应该会自动出现在“链接框架和库”中。
- 然后,只需在任何需要框架的文件顶部放置
import CertificateSigningRequest
。
作者
cbaker6, [email protected]
许可证
CertificateSigningRequest的组件最初在Ales Teska编写的Objective-C语言中,在ios-csr中(见https://github.com/ateska/ios-csr),并由CertificateSigningRequest的作者移植到Swift。因此,CertificateSigningRequest具有相同的GPLv2许可证。更多详细信息请参阅LICENSE文件。