diff --git a/openssl-sys/src/ssl.rs b/openssl-sys/src/ssl.rs index 84db6e26661ebb660f195f34b8a7e47d8202383d..257d380bfeee48983bb8ac1d446c20d111d24205 100644 --- a/openssl-sys/src/ssl.rs +++ b/openssl-sys/src/ssl.rs @@ -1093,6 +1093,9 @@ extern "C" { pub fn SSL_CTX_set_client_CA_list(ctx: *mut SSL_CTX, list: *mut stack_st_X509_NAME); + #[cfg(not(libressl))] + pub fn SSL_CTX_add_client_CA(ctx: *mut SSL_CTX, cacert: *mut X509) -> c_int; + pub fn SSL_CTX_set_default_verify_paths(ctx: *mut SSL_CTX) -> c_int; pub fn SSL_CTX_load_verify_locations( ctx: *mut SSL_CTX, diff --git a/openssl/src/ssl/mod.rs b/openssl/src/ssl/mod.rs index 8f1736377bd75f35aecf98d2f0cf3aacd07eb40a..c130f15ef222bc10cdb1bb7dde52a17e5828fd46 100644 --- a/openssl/src/ssl/mod.rs +++ b/openssl/src/ssl/mod.rs @@ -870,6 +870,23 @@ impl SslContextBuilder { } } + /// Add the provided CA certificate to the list sent by the server to the client when + /// requesting client-side TLS authentication. + /// + /// This corresponds to [`SSL_CTX_add_client_CA`]. + /// + /// [`SSL_CTX_add_client_CA`]: https://www.openssl.org/docs/man1.0.2/man3/SSL_CTX_set_client_CA_list.html + #[cfg(not(libressl))] + pub fn add_client_ca(&mut self, cacert: &mut X509) -> Result<(), ErrorStack> { + unsafe { + cvt(ffi::SSL_CTX_add_client_CA( + self.as_ptr(), + cacert.as_ptr() + )) + .map(|_| ()) + } + } + /// Set the context identifier for sessions. /// /// This value identifies the server's session cache to clients, telling them when they're