Skip to content

Commit 96a8cbc

Browse files
authoredJun 10, 2024··
feat(tls): Use rustls_pki_types::CertificateDer to describe DER encoded certificate (#1707)
* feat(tls): Add CertificateDer to describe DER encoded certificate * feat(tls): Use rustls_pki_types::CertificateDer to describe DER encoded certificate * chore(tls): Refactor internal connect info
1 parent c783652 commit 96a8cbc

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed
 

‎tonic/src/request.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ use crate::metadata::{MetadataMap, MetadataValue};
22
#[cfg(feature = "transport")]
33
use crate::transport::server::TcpConnectInfo;
44
#[cfg(feature = "tls")]
5-
use crate::transport::{server::TlsConnectInfo, Certificate};
5+
use crate::transport::server::TlsConnectInfo;
66
use crate::Extensions;
77
#[cfg(feature = "transport")]
88
use std::net::SocketAddr;
99
#[cfg(feature = "tls")]
1010
use std::sync::Arc;
1111
use std::time::Duration;
12+
#[cfg(feature = "tls")]
13+
use tokio_rustls::rustls::pki_types::CertificateDer;
1214
use tokio_stream::Stream;
1315

1416
/// A gRPC request and metadata from an RPC call.
@@ -258,7 +260,7 @@ impl<T> Request<T> {
258260
/// TLS enabled connections.
259261
#[cfg(feature = "tls")]
260262
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
261-
pub fn peer_certs(&self) -> Option<Arc<Vec<Certificate>>> {
263+
pub fn peer_certs(&self) -> Option<Arc<Vec<CertificateDer<'static>>>> {
262264
self.extensions()
263265
.get::<TlsConnectInfo<TcpConnectInfo>>()
264266
.and_then(|i| i.peer_certs())

‎tonic/src/transport/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ pub use self::service::grpc_timeout::TimeoutExpired;
109109
pub use self::tls::Certificate;
110110
pub use axum::{body::BoxBody as AxumBoxBody, Router as AxumRouter};
111111
pub use hyper::{Body, Uri};
112+
#[cfg(feature = "tls")]
113+
pub use tokio_rustls::rustls::pki_types::CertificateDer;
112114

113115
pub(crate) use self::service::executor::Executor;
114116

‎tonic/src/transport/server/conn.rs

+7-10
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ use hyper::server::conn::AddrStream;
22
use std::net::SocketAddr;
33
use tokio::net::TcpStream;
44

5-
#[cfg(feature = "tls")]
6-
use crate::transport::Certificate;
75
#[cfg(feature = "tls")]
86
use std::sync::Arc;
97
#[cfg(feature = "tls")]
8+
use tokio_rustls::rustls::pki_types::CertificateDer;
9+
#[cfg(feature = "tls")]
1010
use tokio_rustls::server::TlsStream;
1111

1212
/// Trait that connected IO resources implement and use to produce info about the connection.
@@ -125,12 +125,9 @@ where
125125
let (inner, session) = self.get_ref();
126126
let inner = inner.connect_info();
127127

128-
let certs = if let Some(certs) = session.peer_certificates() {
129-
let certs = certs.iter().map(Certificate::from_pem).collect();
130-
Some(Arc::new(certs))
131-
} else {
132-
None
133-
};
128+
let certs = session
129+
.peer_certificates()
130+
.map(|certs| certs.to_owned().into());
134131

135132
TlsConnectInfo { inner, certs }
136133
}
@@ -148,7 +145,7 @@ where
148145
#[derive(Debug, Clone)]
149146
pub struct TlsConnectInfo<T> {
150147
inner: T,
151-
certs: Option<Arc<Vec<Certificate>>>,
148+
certs: Option<Arc<Vec<CertificateDer<'static>>>>,
152149
}
153150

154151
#[cfg(feature = "tls")]
@@ -165,7 +162,7 @@ impl<T> TlsConnectInfo<T> {
165162
}
166163

167164
/// Return the set of connected peer TLS certificates.
168-
pub fn peer_certs(&self) -> Option<Arc<Vec<Certificate>>> {
165+
pub fn peer_certs(&self) -> Option<Arc<Vec<CertificateDer<'static>>>> {
169166
self.certs.clone()
170167
}
171168
}

0 commit comments

Comments
 (0)
Please sign in to comment.