Skip to content

Commit b7d059f

Browse files
committed
feat: parse pem certificates
1 parent 3f0a258 commit b7d059f

File tree

3 files changed

+11
-27
lines changed

3 files changed

+11
-27
lines changed

Cargo.lock

Lines changed: 2 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ hyper-rustls = { version = "0.23.0", features = ["webpki-roots"] }
4343
local-ip-address = "0.4.4"
4444
mime_guess = "2.0.4"
4545
rustls = "0.20.4"
46-
rustls-pemfile = "0.3.0"
46+
rustls-pemfile = "1.0.0"
4747
termcolor = "1.1.3"
4848
tokio = { version = "1.18.2", features = ["fs", "rt-multi-thread", "signal", "macros"] }
4949
tokio-rustls = "0.23.4"

src/config/util/tls.rs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
use anyhow::{ensure, Context, Error, Result};
2-
use rustls::internal::msgs::codec::{Codec, Reader};
2+
use rustls::internal::msgs::codec::Codec;
3+
use rustls::Reader;
34
use rustls::{Certificate, PrivateKey};
4-
use rustls_pemfile::{pkcs8_private_keys, rsa_private_keys};
5+
use rustls_pemfile::{pkcs8_private_keys, rsa_private_keys, Item};
56
use serde::Deserialize;
67
use std::fs::File;
7-
use std::io::{BufRead, BufReader};
8+
use std::io::{BufRead, BufReader, Read};
9+
use std::iter;
810
use std::path::Path;
911
use std::str::FromStr;
1012

@@ -36,19 +38,10 @@ pub fn load_cert(path: &Path) -> Result<Vec<Certificate>> {
3638
path.to_str().unwrap()
3739
))?;
3840
let mut buf_reader = BufReader::new(file);
39-
let bytes = buf_reader
40-
.fill_buf()
41-
.context("Failed to read cerficate bytes.")?;
41+
let cert_bytes = &rustls_pemfile::certs(&mut buf_reader).unwrap()[0];
4242

43-
ensure!(bytes.is_empty(), "The provided certificate is empty");
44-
45-
let mut reader = Reader::init(bytes);
46-
47-
if let Some(cert) = Certificate::read(&mut reader) {
48-
return Ok(vec![cert]);
49-
}
50-
51-
Err(Error::msg("Failed to read certificate"))
43+
ensure!(cert_bytes.len() > 0, "Empty certificate");
44+
Ok(vec![Certificate(cert_bytes.to_vec())])
5245
}
5346

5447
pub fn load_private_key(path: &Path, kind: &PrivateKeyAlgorithm) -> Result<PrivateKey> {

0 commit comments

Comments
 (0)