Skip to content

Commit 1a5de9d

Browse files
committed
chore(tls): Change method to convert certificate and identity to rustls-pki-types type to independent function
1 parent dccc62b commit 1a5de9d

File tree

3 files changed

+26
-22
lines changed

3 files changed

+26
-22
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ use tokio_rustls::{
99
};
1010

1111
use super::io::BoxedIo;
12-
use crate::transport::service::tls::{TlsError, ALPN_H2};
12+
use crate::transport::service::tls::{
13+
convert_certificate_to_pki_types, convert_identity_to_pki_types, TlsError, ALPN_H2,
14+
};
1315
use crate::transport::tls::{Certificate, Identity};
1416

1517
#[derive(Clone)]
@@ -42,13 +44,13 @@ impl TlsConnector {
4244
}
4345

4446
for cert in ca_certs {
45-
roots.add_parsable_certificates(cert.parse()?);
47+
roots.add_parsable_certificates(convert_certificate_to_pki_types(&cert)?);
4648
}
4749

4850
let builder = builder.with_root_certificates(roots);
4951
let mut config = match identity {
5052
Some(identity) => {
51-
let (client_cert, client_key) = identity.parse()?;
53+
let (client_cert, client_key) = convert_identity_to_pki_types(&identity)?;
5254
builder.with_client_auth_cert(client_cert, client_key)?
5355
}
5456
None => builder.with_no_client_auth(),

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ use tokio_rustls::{
77
TlsAcceptor as RustlsAcceptor,
88
};
99

10-
use crate::transport::{server::Connected, service::tls::ALPN_H2, Certificate, Identity};
10+
use crate::transport::{
11+
server::Connected,
12+
service::tls::{convert_certificate_to_pki_types, convert_identity_to_pki_types, ALPN_H2},
13+
Certificate, Identity,
14+
};
1115

1216
#[derive(Clone)]
1317
pub(crate) struct TlsAcceptor {
@@ -26,7 +30,7 @@ impl TlsAcceptor {
2630
None => builder.with_no_client_auth(),
2731
Some(cert) => {
2832
let mut roots = RootCertStore::empty();
29-
roots.add_parsable_certificates(cert.parse()?);
33+
roots.add_parsable_certificates(convert_certificate_to_pki_types(&cert)?);
3034
let verifier = if client_auth_optional {
3135
WebPkiClientVerifier::builder(roots.into()).allow_unauthenticated()
3236
} else {
@@ -37,7 +41,7 @@ impl TlsAcceptor {
3741
}
3842
};
3943

40-
let (cert, key) = identity.parse()?;
44+
let (cert, key) = convert_identity_to_pki_types(&identity)?;
4145
let mut config = builder.with_single_cert(cert, key)?;
4246

4347
config.alpn_protocols.push(ALPN_H2.into());

tonic/src/transport/service/tls.rs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,20 @@ impl fmt::Display for TlsError {
3131

3232
impl std::error::Error for TlsError {}
3333

34-
impl Certificate {
35-
pub(crate) fn parse(&self) -> Result<Vec<CertificateDer<'static>>, TlsError> {
36-
rustls_pemfile::certs(&mut Cursor::new(&self.pem))
37-
.collect::<Result<Vec<_>, _>>()
38-
.map_err(|_| TlsError::CertificateParseError)
39-
}
34+
pub(crate) fn convert_certificate_to_pki_types(
35+
certificate: &Certificate,
36+
) -> Result<Vec<CertificateDer<'static>>, TlsError> {
37+
rustls_pemfile::certs(&mut Cursor::new(certificate))
38+
.collect::<Result<Vec<_>, _>>()
39+
.map_err(|_| TlsError::CertificateParseError)
4040
}
4141

42-
impl Identity {
43-
pub(crate) fn parse(
44-
&self,
45-
) -> Result<(Vec<CertificateDer<'static>>, PrivateKeyDer<'static>), TlsError> {
46-
let cert = self.cert.parse()?;
47-
let Ok(Some(key)) = rustls_pemfile::private_key(&mut Cursor::new(&self.key)) else {
48-
return Err(TlsError::PrivateKeyParseError);
49-
};
50-
Ok((cert, key))
51-
}
42+
pub(crate) fn convert_identity_to_pki_types(
43+
identity: &Identity,
44+
) -> Result<(Vec<CertificateDer<'static>>, PrivateKeyDer<'static>), TlsError> {
45+
let cert = convert_certificate_to_pki_types(&identity.cert)?;
46+
let Ok(Some(key)) = rustls_pemfile::private_key(&mut Cursor::new(&identity.key)) else {
47+
return Err(TlsError::PrivateKeyParseError);
48+
};
49+
Ok((cert, key))
5250
}

0 commit comments

Comments
 (0)