feat(transport): Expose more granular control of TLS configuration (#48)
This commit reworks TLS configuration of both servers and endpoints in order to provide a more flexible API. We now add options to configure the selected TLS library using the appropriate 'native' configuration structures, as well as retaining the existing simplier interface which is compatible with both. The new API can also be easily extended to support simple interfaces for configuring mTLS and a range of other options without creating sprawl in the builders for `Server` and `Endpoint`.
This commit is contained in:
committed by
Lucio Franco
parent
4628ff0258
commit
8db3961491
@@ -1,6 +1,6 @@
|
||||
use std::time::Duration;
|
||||
use structopt::{clap::arg_enum, StructOpt};
|
||||
use tonic::transport::{Certificate, Endpoint};
|
||||
use tonic::transport::{Certificate, ClientTlsConfig, Endpoint};
|
||||
use tonic_interop::client;
|
||||
|
||||
#[derive(StructOpt)]
|
||||
@@ -33,7 +33,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
if matches.use_tls {
|
||||
let pem = tokio::fs::read("tonic-interop/data/ca.pem").await?;
|
||||
let ca = Certificate::from_pem(pem);
|
||||
endpoint.openssl_tls(ca, Some("foo.test.google.fr".into()));
|
||||
|
||||
endpoint.tls_config(
|
||||
ClientTlsConfig::with_openssl()
|
||||
.ca_certificate(ca)
|
||||
.domain_name("foo.test.google.fr"),
|
||||
);
|
||||
}
|
||||
|
||||
let channel = endpoint.channel();
|
||||
|
||||
@@ -2,7 +2,7 @@ use http::header::HeaderName;
|
||||
use structopt::StructOpt;
|
||||
use tonic::body::BoxBody;
|
||||
use tonic::client::GrpcService;
|
||||
use tonic::transport::{Identity, Server};
|
||||
use tonic::transport::{Identity, Server, ServerTlsConfig};
|
||||
use tonic_interop::{server, MergeTrailers};
|
||||
|
||||
#[derive(StructOpt)]
|
||||
@@ -26,7 +26,7 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
|
||||
let key = tokio::fs::read("tonic-interop/data/server1.key").await?;
|
||||
|
||||
let identity = Identity::from_pem(cert, key);
|
||||
builder.openssl_tls(identity);
|
||||
builder.tls_config(ServerTlsConfig::with_openssl().identity(identity));
|
||||
}
|
||||
|
||||
builder.interceptor_fn(|svc, req| {
|
||||
|
||||
Reference in New Issue
Block a user