3个版本
0.1.2 | 2021年3月23日 |
---|---|
0.1.1 | 2021年3月23日 |
0.1.0 | 2021年3月21日 |
#5 in #固定
12KB
57 行
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