#tls #certificate #validation #certificate-chain

certitude

适用于 OS X 和 Windows 的证书验证逻辑

4 个稳定版本

使用旧的 Rust 2015

1.1.0 2017 年 5 月 24 日
1.0.2 2016 年 5 月 31 日
1.0.1 2016 年 3 月 9 日
1.0.0 2016 年 3 月 7 日

#2313 in 加密学


c-certitude 中使用

MIT 许可证

23KB
443

确信 for Rust

该仓库包含了一个构建跨平台 Rust 库的示例,该库能够使用系统原生的 X.509 栈来验证证书。

这受到了 Chrome 浏览器选择在协议级别使用 BoringSSL(OpenSSL 的分支)来进行 TLS,但使用系统的逻辑来验证证书的启发。这允许 Chrome 应用在证书管理方面感觉“原生”,而不需要他们的网络工程师了解每个平台原生的 TLS 实现的细微差别。

API

该库的目标是提供两个 API:一个适合 Rust 直接使用,另一个可以使用 C ABI 在尽可能多的编程语言中使用。这将使得减少跨语言的重复工作成为可能:每种语言只需对 Rust 库进行一次 FFI 调用,然后它将处理到各个平台的抽象。

Rust API 当前看起来是这样的

extern crate certitude;

use certitude::platform::validate_cert_chain;

fn example() {
    // Assume certs is a Vector of DER-encoded certificates.
    let valid = validate_cert_chain(certs, "example.com");

    if valid {
        // The certificate chain is valid.
    } else {
        // The certificate chain is invalid in some way.
    }
}

OS X 和 Windows 的实现可以透明地切换,这样使用该库的用户可以使用单个 API,并直接使用适当的平台特定逻辑,而无需他们的干预。这当然需要针对正确的目标进行构建,但只要正确指定了目标,就会使用正确的代码版本。

工作正在进行中

这目前是一个非常早期的测试版,我主要在研究这种方法的可能性。目前,该库支持 OS X 和 Windows 作为有效的证书验证平台。我将研究将其钩入 OpenSSL 的可行性,尽管这被认为是一个相对不那么重要的问题,因为使用 OpenSSL 进行 TLS 的人已经能够访问 OpenSSL 的原生验证逻辑。


lib.rs:

用于在许多平台上验证证书的函数。

确信专注于通过使用适当的平台特定逻辑来验证用于 TLS 连接的 X.509 证书链,而不是依赖于实际建立连接的 TLS 库。这种方法对想要在 Windows 和 OS X 上使用 OpenSSL 构建 TLS 连接,但希望在那些系统上显示“原生”行为的库来说很有用。

当前 Certitude 仅支持 Windows 和 OS X:它明确不支持 Linux 或其他 Unix 系统,在这些系统中,预期将使用 OpenSSL(或相应的 TLS 库)提供的验证逻辑。由于该库很可能负责实际处理 TLS 逻辑,因此很可能很容易使用内置的验证逻辑。

依赖项

~240KB