Skip to content

Commit f1cc535

Browse files
committed
Add some auth/tls logic back in
1 parent dff6c92 commit f1cc535

File tree

2 files changed

+36
-38
lines changed

2 files changed

+36
-38
lines changed

src/tls/certificate.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ impl WorkloadCertificate {
230230
roots.add_parsable_certificates(chain.iter().last().map(|c| c.der.clone()));
231231
roots.add_parsable_certificates(vec![CertificateDer::from_pem_file(
232232
"/home/sj/learning/openssl/c/root.crt",
233-
).unwrap()]);
233+
)
234+
.unwrap()]);
234235

235236
Ok(WorkloadCertificate {
236237
cert,
@@ -259,7 +260,8 @@ impl WorkloadCertificate {
259260
let mut roots = (*self.roots).clone();
260261
roots.add_parsable_certificates(vec![CertificateDer::from_pem_file(
261262
"/home/sj/learning/openssl/c/root.crt",
262-
).unwrap()]);
263+
)
264+
.unwrap()]);
263265
let raw_client_cert_verifier = WebPkiClientVerifier::builder_with_provider(
264266
Arc::new(roots),
265267
crate::tls::lib::provider(),
@@ -291,7 +293,7 @@ impl WorkloadCertificate {
291293
.expect("client config must be valid")
292294
.dangerous() // Customer verifier is requires "dangerous" opt-in
293295
.with_custom_certificate_verifier(Arc::new(verifier))
294-
.with_no_client_auth();
296+
.with_client_auth_cert(self.cert_and_intermediates(), self.private_key.clone_key())?;
295297
cc.alpn_protocols = vec![b"h2".into()];
296298
cc.resumption = Resumption::disabled();
297299
cc.enable_sni = false;

src/tls/workload.rs

+31-35
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,11 @@ impl ClientCertVerifier for TrustDomainVerifier {
108108
intermediates: &[CertificateDer<'_>],
109109
now: UnixTime,
110110
) -> Result<ClientCertVerified, rustls::Error> {
111-
Ok(ClientCertVerified::assertion())
112-
// let res = self
113-
// .base
114-
// .verify_client_cert(end_entity, intermediates, now)?;
115-
// self.verify_trust_domain(end_entity)?;
116-
// Ok(res)
111+
let res = self
112+
.base
113+
.verify_client_cert(end_entity, intermediates, now)?;
114+
self.verify_trust_domain(end_entity)?;
115+
Ok(res)
117116
}
118117

119118
fn verify_tls12_signature(
@@ -122,8 +121,7 @@ impl ClientCertVerifier for TrustDomainVerifier {
122121
cert: &CertificateDer<'_>,
123122
dss: &DigitallySignedStruct,
124123
) -> Result<HandshakeSignatureValid, rustls::Error> {
125-
Ok(HandshakeSignatureValid::assertion())
126-
// self.base.verify_tls12_signature(message, cert, dss)
124+
self.base.verify_tls12_signature(message, cert, dss)
127125
}
128126

129127
fn verify_tls13_signature(
@@ -132,8 +130,7 @@ impl ClientCertVerifier for TrustDomainVerifier {
132130
cert: &CertificateDer<'_>,
133131
dss: &DigitallySignedStruct,
134132
) -> Result<HandshakeSignatureValid, rustls::Error> {
135-
Ok(HandshakeSignatureValid::assertion())
136-
// self.base.verify_tls13_signature(message, cert, dss)
133+
self.base.verify_tls13_signature(message, cert, dss)
137134
}
138135

139136
fn supported_verify_schemes(&self) -> Vec<SignatureScheme> {
@@ -188,31 +185,30 @@ pub struct IdentityVerifier {
188185

189186
impl IdentityVerifier {
190187
fn verify_full_san(&self, server_cert: &CertificateDer<'_>) -> Result<(), rustls::Error> {
191-
Ok(())
192-
// use x509_parser::prelude::*;
193-
// let (_, c) = X509Certificate::from_der(server_cert).map_err(|_e| {
194-
// rustls::Error::InvalidCertificate(rustls::CertificateError::BadEncoding)
195-
// })?;
196-
// let id = tls::certificate::identities(c).map_err(|_e| {
197-
// rustls::Error::InvalidCertificate(
198-
// rustls::CertificateError::ApplicationVerificationFailure,
199-
// )
200-
// })?;
201-
// trace!(
202-
// "verifying server identities {id:?} against {:?}",
203-
// self.identity
204-
// );
205-
// for ident in id.iter() {
206-
// if let Some(_i) = self.identity.iter().find(|id| id == &ident) {
207-
// return Ok(());
208-
// }
209-
// }
210-
// debug!("identity mismatch {id:?} != {:?}", self.identity);
211-
// Err(rustls::Error::InvalidCertificate(
212-
// rustls::CertificateError::Other(rustls::OtherError(Arc::new(DebugAsDisplay(
213-
// TlsError::SanError(self.identity.clone(), id),
214-
// )))),
215-
// ))
188+
use x509_parser::prelude::*;
189+
let (_, c) = X509Certificate::from_der(server_cert).map_err(|_e| {
190+
rustls::Error::InvalidCertificate(rustls::CertificateError::BadEncoding)
191+
})?;
192+
let id = tls::certificate::identities(c).map_err(|_e| {
193+
rustls::Error::InvalidCertificate(
194+
rustls::CertificateError::ApplicationVerificationFailure,
195+
)
196+
})?;
197+
trace!(
198+
"verifying server identities {id:?} against {:?}",
199+
self.identity
200+
);
201+
for ident in id.iter() {
202+
if let Some(_i) = self.identity.iter().find(|id| id == &ident) {
203+
return Ok(());
204+
}
205+
}
206+
debug!("identity mismatch {id:?} != {:?}", self.identity);
207+
Err(rustls::Error::InvalidCertificate(
208+
rustls::CertificateError::Other(rustls::OtherError(Arc::new(DebugAsDisplay(
209+
TlsError::SanError(self.identity.clone(), id),
210+
)))),
211+
))
216212
}
217213
}
218214

0 commit comments

Comments
 (0)