CertificateSigningRequest 1.30.0

CertificateSigningRequest 1.30.0

Corey Baker 维护。



  • cbaker6

CertificateSigningRequest

Documentation CI Status Codecov Pod License

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

iOS

支持 RSA (密钥大小:512,1024,2048) 和 EC 在/外部安全区域(iOS 目前仅支持 256 位密钥),SHA1,SHA256 和 SHA512。

macOS

支持 RSA (密钥大小:1024,2048) 和 EC 在/外部安全区域,SHA1,SHA256 和 SHA512。

使用

使用步骤如下

  1. 生成你的公钥/私钥对。这可以使用iOS中的Keychain完成。一个示例可以在测试文件中的generateKeysAndStoreInKeychain函数中找到。
  2. 通过在查询中使用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)
}
  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. 然后简单地使用公钥(位数)和私钥构建你的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文件。