Skip to content

Commit 045008c

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

File tree

3 files changed

+25
-22
lines changed

3 files changed

+25
-22
lines changed

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

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

1414
use super::io::BoxedIo;
15-
use crate::transport::service::tls::{TlsError, ALPN_H2};
15+
use crate::transport::service::tls::{
16+
convert_certificate_to_pki_types, convert_identity_to_pki_types, TlsError, ALPN_H2,
17+
};
1618
use crate::transport::tls::{Certificate, Identity};
1719

1820
#[derive(Clone)]
@@ -54,13 +56,13 @@ impl TlsConnector {
5456
}
5557

5658
for cert in ca_certs {
57-
roots.add_parsable_certificates(cert.parse()?);
59+
roots.add_parsable_certificates(convert_certificate_to_pki_types(&cert)?);
5860
}
5961

6062
let builder = builder.with_root_certificates(roots);
6163
let mut config = match identity {
6264
Some(identity) => {
63-
let (client_cert, client_key) = identity.parse()?;
65+
let (client_cert, client_key) = convert_identity_to_pki_types(&identity)?;
6466
builder.with_client_auth_cert(client_cert, client_key)?
6567
}
6668
None => builder.with_no_client_auth(),

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

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

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

1215
#[derive(Clone)]
1316
pub(crate) struct TlsAcceptor {
@@ -26,7 +29,7 @@ impl TlsAcceptor {
2629
None => builder.with_no_client_auth(),
2730
Some(cert) => {
2831
let mut roots = RootCertStore::empty();
29-
roots.add_parsable_certificates(cert.parse()?);
32+
roots.add_parsable_certificates(convert_certificate_to_pki_types(&cert)?);
3033
let verifier = if client_auth_optional {
3134
WebPkiClientVerifier::builder(roots.into()).allow_unauthenticated()
3235
} else {
@@ -37,7 +40,7 @@ impl TlsAcceptor {
3740
}
3841
};
3942

40-
let (cert, key) = identity.parse()?;
43+
let (cert, key) = convert_identity_to_pki_types(&identity)?;
4144
let mut config = builder.with_single_cert(cert, key)?;
4245

4346
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
@@ -35,22 +35,20 @@ impl fmt::Display for TlsError {
3535

3636
impl std::error::Error for TlsError {}
3737

38-
impl Certificate {
39-
pub(crate) fn parse(&self) -> Result<Vec<CertificateDer<'static>>, TlsError> {
40-
rustls_pemfile::certs(&mut Cursor::new(&self.pem))
41-
.collect::<Result<Vec<_>, _>>()
42-
.map_err(|_| TlsError::CertificateParseError)
43-
}
38+
pub(crate) fn convert_certificate_to_pki_types(
39+
certificate: &Certificate,
40+
) -> Result<Vec<CertificateDer<'static>>, TlsError> {
41+
rustls_pemfile::certs(&mut Cursor::new(certificate))
42+
.collect::<Result<Vec<_>, _>>()
43+
.map_err(|_| TlsError::CertificateParseError)
4444
}
4545

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

0 commit comments

Comments
 (0)