TLS

Driver uses the openssl crate for TLS functionality.
It was chosen because rustls doesn't support certificates for ip addresses (see issue), which is a common use case for Scylla.

Enabling feature

openssl is not a pure Rust library so you need enable a feature and install the proper package.

To enable the tls feature add in Cargo.toml:

scylla = { version = "0.3.1", features = ["ssl"] }
openssl = "0.10.32"

Then install the package with openssl:

  • Debian/Ubuntu:
    apt install libssl-dev pkg-config
    
  • Fedora:
    dnf install openssl-devel
    
  • Arch:
    pacman -S openssl pkg-config
    

Using TLS

To use tls you will have to create an openssl SslContext and pass it to SessionBuilder

For example, if database certificate is in the file ca.crt:


#![allow(unused)]
fn main() {
extern crate scylla;
extern crate openssl;
use scylla::{Session, SessionBuilder};
use openssl::ssl::{SslContextBuilder, SslMethod, SslVerifyMode};
use std::path::PathBuf;

use std::error::Error;
async fn check_only_compiles() -> Result<(), Box<dyn Error>> {
let mut context_builder = SslContextBuilder::new(SslMethod::tls())?;
context_builder.set_ca_file("ca.crt")?;
context_builder.set_verify(SslVerifyMode::PEER);

let session: Session = SessionBuilder::new()
    .known_node("127.0.0.1:9142") // The the port is now 9142
    .ssl_context(Some(context_builder.build()))
    .build()
    .await?;

Ok(())
}
}

See the full example for more details