介绍 Swift Certificates 和 Swift ASN.1
我很高兴地宣布两个新的开源 Swift 软件包:swift-certificates 和 swift-asn1。 这些库共同为开发者提供了更快、更安全的 X.509 证书实现,X.509 证书是 TLS 安全性的关键技术。
X.509 和 ASN.1
什么是 X.509 证书?
X.509 证书是一种常用的身份格式,用于以加密方式证明系统中参与者的身份。 它们是定义公钥基础设施 (PKI) 的 X.509 标准的一部分。 X.509 风格的 PKI 通常用于需要将证明参与者身份的权限委托给少数受信任方(称为证书颁发机构)的情况。
我们大多数人在 TLS 证书的形式中体验 X.509,但它们还有广泛的其他用途,例如代码签名和令牌交换。
服务器端应用程序频繁使用 X.509 证书。 至少,大多数 Web 服务器将加载 TLS 证书以保护其网络连接。
存在更多复杂的用例,从使用 ACME 动态配置 TLS 证书到使用 x5c 验证身份。 这使得功能齐全的 X.509 库成为服务器端生态系统的强大资产。
什么是 ASN.1?
X.509 证书类型的布局是使用一种名为 ASN.1(抽象语法表示法一)的数据类型定义语言定义的。
ASN.1 非常灵活和复杂。 类型可以被定义和递归引用。 字段可以被命名和标记。 字段可以是可选的或默认的。 可以应用人类可读的注释,通常会对 ASN.1 能够表达的内容施加进一步的约束。
ASN.1 是用于定义类型的格式的名称,但是序列化 ASN.1 类型的方法不止一种。 这些方法称为“编码规则”,并且有很多种。 ASN.1 的绝大多数加密用例都使用可 distinguished 编码规则 (DER) 或基本编码规则 (BER)。
对于证书用例,X.509 证书在 ASN.1 中定义并使用 DER 序列化这一事实意味着,为了提供功能强大、安全且 Swift 原生的 X.509 库,我们也需要构建一个 ASN.1 库。
新的软件包
Swift ASN.1
Swift ASN.1 提供了两个主要功能:通用 ASN.1 货币类型的实现,以及 DER 序列化和反序列化的实现。 这足以实现 DER 的大多数加密用例,包括 swift-certificates。
Swift ASN.1 使用完全内存安全的代码和低开销提供了这些安全关键的解析和序列化服务。
使此解析器安全特别有价值,因为 DER 解析器的主要目标是解析不受信任的用户输入。 ASN.1 解析中的内存安全漏洞通常会导致高严重性问题。
Swift Certificates
Swift Certificates 已在早期阶段发布,以便获得社区反馈,因此它缺少一些广泛使用所需的功能。 目前它可以
- 解析大多数符合 RFC 5280 并在 Web PKI 中使用的 X.509 证书。
- 执行 X.509 链构建。
- 支持可插拔的 X.509 验证策略。
- 支持可插拔的 OCSP 解析。
一旦软件包具有足够强大的 X.509 验证器,可以安全地支持 WebPKI 用例,版本 1.0 即可准备就绪。
我们的中期目标是用 Swift Certificates 替换 swift-nio-ssl 基于 BoringSSL 的 X.509 实现。 这应该为所有使用 TLS 的应用程序提供显着的性能改进,并为重要的攻击面增加内存安全性。 我们还打算增加对证书签名请求的支持,为与证书颁发服务进行更自动化的交互打开大门。
参与进来
请密切关注代码仓库(swift-certificates, swift-asn1)、未解决的问题和拉取请求,并尝试使用代码并报告反馈。
我们对 Swift Certificates 为 Swift 社区所能做的事情感到非常兴奋,并且我们期待看到它解锁各种新的用例和技术。