Skip to content

Commit 4e7e742

Browse files
committed
chore(tls): Refactor parsing Certificate
1 parent 74d7673 commit 4e7e742

File tree

3 files changed

+16
-24
lines changed

3 files changed

+16
-24
lines changed

tonic/src/transport/channel/service/tls.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use std::fmt;
2-
use std::io::Cursor;
32
use std::sync::Arc;
43

54
use hyper_util::rt::TokioIo;
@@ -10,7 +9,7 @@ use tokio_rustls::{
109
};
1110

1211
use super::io::BoxedIo;
13-
use crate::transport::service::tls::{add_certs_from_pem, load_identity, TlsError, ALPN_H2};
12+
use crate::transport::service::tls::{load_identity, TlsError, ALPN_H2};
1413
use crate::transport::tls::{Certificate, Identity};
1514

1615
#[derive(Clone)]
@@ -43,7 +42,7 @@ impl TlsConnector {
4342
}
4443

4544
for cert in ca_certs {
46-
add_certs_from_pem(&mut Cursor::new(cert), &mut roots)?;
45+
roots.add_parsable_certificates(cert.parse()?);
4746
}
4847

4948
let builder = builder.with_root_certificates(roots);

tonic/src/transport/server/service/tls.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{fmt, io::Cursor, sync::Arc};
1+
use std::{fmt, sync::Arc};
22

33
use tokio::io::{AsyncRead, AsyncWrite};
44
use tokio_rustls::{
@@ -9,7 +9,7 @@ use tokio_rustls::{
99

1010
use crate::transport::{
1111
server::Connected,
12-
service::tls::{add_certs_from_pem, load_identity, ALPN_H2},
12+
service::tls::{load_identity, ALPN_H2},
1313
Certificate, Identity,
1414
};
1515

@@ -30,7 +30,7 @@ impl TlsAcceptor {
3030
None => builder.with_no_client_auth(),
3131
Some(cert) => {
3232
let mut roots = RootCertStore::empty();
33-
add_certs_from_pem(&mut Cursor::new(cert), &mut roots)?;
33+
roots.add_parsable_certificates(cert.parse()?);
3434
let verifier = if client_auth_optional {
3535
WebPkiClientVerifier::builder(roots.into()).allow_unauthenticated()
3636
} else {

tonic/src/transport/service/tls.rs

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
use std::{fmt, io::Cursor};
22

3-
use tokio_rustls::rustls::{
4-
pki_types::{CertificateDer, PrivateKeyDer},
5-
RootCertStore,
6-
};
3+
use tokio_rustls::rustls::pki_types::{CertificateDer, PrivateKeyDer};
74

8-
use crate::transport::Identity;
5+
use crate::transport::{Certificate, Identity};
96

107
/// h2 alpn in plain format for rustls.
118
pub(crate) const ALPN_H2: &[u8] = b"h2";
@@ -34,6 +31,15 @@ impl fmt::Display for TlsError {
3431

3532
impl std::error::Error for TlsError {}
3633

34+
impl Certificate {
35+
pub(crate) fn parse(&self) -> Result<Vec<CertificateDer<'static>>, TlsError> {
36+
let mut cert = Cursor::new(&self.pem);
37+
rustls_pemfile::certs(&mut cert)
38+
.collect::<Result<Vec<_>, _>>()
39+
.map_err(|_| TlsError::CertificateParseError)
40+
}
41+
}
42+
3743
pub(crate) fn load_identity(
3844
identity: Identity,
3945
) -> Result<(Vec<CertificateDer<'static>>, PrivateKeyDer<'static>), TlsError> {
@@ -47,16 +53,3 @@ pub(crate) fn load_identity(
4753

4854
Ok((cert, key))
4955
}
50-
51-
pub(crate) fn add_certs_from_pem(
52-
mut certs: &mut dyn std::io::BufRead,
53-
roots: &mut RootCertStore,
54-
) -> Result<(), crate::Error> {
55-
for cert in rustls_pemfile::certs(&mut certs).collect::<Result<Vec<_>, _>>()? {
56-
roots
57-
.add(cert)
58-
.map_err(|_| TlsError::CertificateParseError)?;
59-
}
60-
61-
Ok(())
62-
}

0 commit comments

Comments
 (0)