3个版本

0.1.2 2021年3月23日
0.1.1 2021年3月23日
0.1.0 2021年3月21日

#5 in #固定

Apache-2.0

12KB
57

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

rustls-pin

使用rustls进行服务器证书固定。

功能

  • 与服务器建立TLS连接
  • 检查服务器是否使用允许的证书
  • 禁止(不安全代码)
  • 100%测试覆盖率

如何更新固定的证书

在将服务器切换到新证书之前,您需要将客户端升级以接受当前证书和新证书。

如果您的用户很少更新客户端软件,您可能需要等待很长时间才能切换到新证书。

通过拥有多个待处理的“新”证书,您可以频繁更改证书。示例

  • 服务器:cert1
  • 客户端v1:cert1
  • 客户端v2:cert1, cert2
  • 客户端v3:cert1, cert2, cert3
  • 服务器:cert2
  • 客户端v4:cert2, cert3, cert4
  • 服务器:cert3
  • 客户端v5:cert3, cert4, cert5
  • 服务器cert4

示例

let mut stream = rustls_pin::connect_pinned(
    addr,
    vec![server_cert1, server_cert2],
).unwrap();
let mut response = String::new();
match std::io::Read::read_to_string(
    &mut stream, &mut response) {
    Ok(_) => {},
    Err(e) if &e.to_string() ==
        "invalid certificate: UnknownIssuer"
     => panic!("Update required."),
    Err(e) => {
        // panic!("{}", e)
    }
}

当客户端软件读取/写入流并遇到无效证书: UnknownIssuer错误时,它可以假设它已过时。它可以告诉用户更新。

rustls客户端通过向服务器发送“无效证书”原因来终止TLS连接。服务器的流读取/写入失败,错误为:"Custom { kind: InvalidData, error: AlertReceived(BadCertificate) }"

替代方案

变更日志

  • v0.1.2
    • 将“如何更新固定的证书”添加到文档中。
    • 添加错误处理到示例中
  • v0.1.1 - 增加测试覆盖率
  • v0.1.0 - 初始版本

快乐的贡献者 :)

修复错误和添加功能既容易又快。发送给我们一个pull request,我们打算

  • 始终在24小时内响应
  • 提供清晰具体的反馈
  • 立即为您的接受更改发布新版本

许可证:Apache-2.0

依赖项

~9MB
~256K SLoC