Add tls example with rustls
This commit is contained in:
@@ -36,8 +36,16 @@ path = "src/load_balance/client.rs"
|
|||||||
name = "load-balance-server"
|
name = "load-balance-server"
|
||||||
path = "src/load_balance/server.rs"
|
path = "src/load_balance/server.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "tls-client"
|
||||||
|
path = "src/tls/client.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "tls-server"
|
||||||
|
path = "src/tls/server.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tonic = { path = "../tonic" }
|
tonic = { path = "../tonic", features = ["rustls"] }
|
||||||
futures-preview = { version = "=0.3.0-alpha.18", default-features = false, features = ["alloc"]}
|
futures-preview = { version = "=0.3.0-alpha.18", default-features = false, features = ["alloc"]}
|
||||||
tokio = "=0.2.0-alpha.4"
|
tokio = "=0.2.0-alpha.4"
|
||||||
prost = "0.5"
|
prost = "0.5"
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIE3DCCA0SgAwIBAgIRAObeYbJFiVQSGR8yk44dsOYwDQYJKoZIhvcNAQELBQAw
|
||||||
|
gYUxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEtMCsGA1UECwwkbHVj
|
||||||
|
aW9ATHVjaW9zLVdvcmstTUJQIChMdWNpbyBGcmFuY28pMTQwMgYDVQQDDCtta2Nl
|
||||||
|
cnQgbHVjaW9ATHVjaW9zLVdvcmstTUJQIChMdWNpbyBGcmFuY28pMB4XDTE5MDky
|
||||||
|
OTIzMzUzM1oXDTI5MDkyOTIzMzUzM1owgYUxHjAcBgNVBAoTFW1rY2VydCBkZXZl
|
||||||
|
bG9wbWVudCBDQTEtMCsGA1UECwwkbHVjaW9ATHVjaW9zLVdvcmstTUJQIChMdWNp
|
||||||
|
byBGcmFuY28pMTQwMgYDVQQDDCtta2NlcnQgbHVjaW9ATHVjaW9zLVdvcmstTUJQ
|
||||||
|
IChMdWNpbyBGcmFuY28pMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA
|
||||||
|
y/vE61ItbN/1qMYt13LMf+le1svwfkCCOPsygk7nWeRXmomgUpymqn1LnWiuB0+e
|
||||||
|
4IdVH2f5E9DknWEpPhKIDMRTCbz4jTwQfHrxCb8EGj3I8oO73pJO5S/xCedM9OrZ
|
||||||
|
qWcYWwN0GQ8cO/ogazaoZf1uTrRNHyzRyQsKyb412kDBTNEeldJZ2ljKgXXvh4HO
|
||||||
|
2ZIk9K/ZAaAf6VN8K/89rlJ9/KPgRVNsyAapE+Pb8XXKtpzeFiEcUfuXVYWtkoW+
|
||||||
|
xyn/Zu8A1L2CXMQ1sARh7P/42BTMKr5pfraYgcBGxKXLrxoySpxCO9KqeVveKy1q
|
||||||
|
fPm5FCwFsXDr0koFLrCiR58mcIO/04Q9DKKTV4Z2a+LoqDJRY37KfBSc8sDMPhw5
|
||||||
|
k7g3WPoa6QwXRjZTCA5fHWVgLOtcwLsnju5tBE4LDxwF6s+1wPF8NI5yUfufcEjJ
|
||||||
|
Z6JBwgoWYosVj27Lx7KBNLU/57PX9ryee691zmtswt0tP0WVBAgalhYWg99RXoa3
|
||||||
|
AgMBAAGjRTBDMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0G
|
||||||
|
A1UdDgQWBBQdvlE4Bdcsjc9oaxjDCRu5FiuZkzANBgkqhkiG9w0BAQsFAAOCAYEA
|
||||||
|
BP/6o1kPINksMJZSSXgNCPZskDLyGw7auUZBnQ0ocDT3W6gXQvT/27LM1Hxoj9Eh
|
||||||
|
qU1TYdEt7ppecLQSGvzQ02MExG7H75art75oLiB+A5agDira937YbK4MCjqW481d
|
||||||
|
bDhw6ixJnY1jIvwjEZxyH6g94YyL927aSPch51fys0kSnjkFzC2RmuzDADScc4XH
|
||||||
|
5P1+/3dnIm3M5yfpeUzoaOrTXNmhn8p0RDIGrZ5kA5eISIGGD3Mm8FDssUNKndtO
|
||||||
|
g4ojHUsxb14icnAYGeye1NOhGiqN6TEFcgr6MPd0XdFNZ5c0HUaBCfN6bc+JxDV5
|
||||||
|
MKZVJdNeJsYYwilgJNHAyZgCi30JC20xeYVtTF7CEEsMrFDGJ70Kz7o/FnRiFsA1
|
||||||
|
ZSwVVWhhkHG2VkT4vlo0O3fYeZpenYicvy+wZNTbGK83gzHWqxxNC1z3Etg5+HRJ
|
||||||
|
F9qeMWPyfA3IHYXygiMcviyLcyNGG/SJ0EhUpYBN/Gg7wI5yFkcsxUDPPzd23O0M
|
||||||
|
-----END CERTIFICATE-----
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDyptbMyYWztgta
|
||||||
|
t1MXLMzIkaQdeeVbs1Y/qCpAdwZe/Y5ZpbzjGIjCxbB6vNRSnEbYKpytKHPzYfM7
|
||||||
|
8d8K8bPvpnqXIiTXFT0JQlw1OHLC1fr4e598GJumAmpMYFrtqv0fbmUFTuQGbHxe
|
||||||
|
OH2vji0bvr3NKZubMfkEZP3X4sNXXoXIuW2LaS8OMGKoJaeCBvdbszEiSGj/v9Bj
|
||||||
|
pM0yLTH89NNMX1T+FtTKnuXag5g7pr6lzJj83+MzAGy4nOjseSuUimuiyG90/C5t
|
||||||
|
A5wC0Qh5RbDnkFYhC44Kxof/i6+jnfateIPNiIIwQV+2f6G/aK1hgjekT10m/eoR
|
||||||
|
YDTf+e5ZAgMBAAECggEACODt7yRYjhDVLYaTtb9f5t7dYG67Y7WWLFIc6arxQryI
|
||||||
|
XuNfm/ej2WyeXn9WTYeGWBaHERbv1zH4UnMxNBdP/C7dQXZwXqZaS2JwOUpNeK+X
|
||||||
|
tUvgtAu6dkKUXSMRcKzXAjVp4N3YHhwOGOx8PNY49FDwZPdmyDD16aFAYIvdle6/
|
||||||
|
PSMrj38rB1sbQQdmRob2FjJBSDZ44nsr+/nilrcOFNfNnWv7tQIWYVXNcLfdK/WJ
|
||||||
|
ZCDFhA8lr/Yon6MEq6ApTj2ZYRRGXPd6UeASJkmTZEUIUbeDcje/MO8cHkREpuRH
|
||||||
|
wm3pCjR7OdO4vc+/d/QmEvu5ns6wbTauelYnL616YQKBgQD414gJtpCHauNEUlFB
|
||||||
|
v/R3DzPI5NGp9PAqovOD8nCbI49Mw61gP/ExTIPKiR5uUX/5EL04uspaNkuohXk+
|
||||||
|
ys0G5At0NfV7W39lzhvALEaSfleybvYxppbBrc20/q8Gvi/i30NY+1LM3RdtMiEw
|
||||||
|
hKHjU0SnFhJq0InFg3AO/iCeTQKBgQD5obkbzpOidSsa55aNsUlO2qjiUY9leq9b
|
||||||
|
irAohIZ8YnuuixYvkOeSeSz1eIrA4tECeAFSgTZxYe1Iz+USru2Xg/0xNte11dJD
|
||||||
|
rBoH/yMn2gDvBK7xQ6uFMPTeYtKG0vfvpXZYSWZzGntyrHTwFk6UV+xdrt9MBdd1
|
||||||
|
XdSn7bwOPQKBgC9VQAko8uDvUf+C8PXiv2uONrl13PPJJY3WpR9qFEVOREnDxszS
|
||||||
|
HNzVwxPZdTJiykbkCjoqPadfQJDzopZxGQLAifU29lTamKcSx3CMe3gOFDxaovXa
|
||||||
|
zD5XAxP0hfJwZsdu1G6uj5dsTrJ0oJ+L+wc0pZBqwGIU/L/XOo9/g1DZAoGAUebL
|
||||||
|
kuH98ik7EUK2VJq8EJERI9/ailLsQb6I+WIxtZGiPqwHhWencpkrNQZtj8dbB9JT
|
||||||
|
rLwUHrMgZOlAoRafgTyez4zMzS3wJJ/Mkp8U67hM4h7JPwMSvUpIrMYDiJSjIA9L
|
||||||
|
er/qSw1/Pypx22uWMHmAZWRAgvLPtAQrB0Wqk4kCgYEAr2H1PvfbwZwkSvlMt5o8
|
||||||
|
WLnBbxcM3AKglLRbkShxxgiZYdEP71/uOtRMiL26du5XX8evItITN0DsvmXL/kcd
|
||||||
|
h29LK7LM5uLw7efz0Qxs03G6kEyIHVkacowHi5I5Ul1qI61SoV3yMB1TjIU+bXZt
|
||||||
|
0ZjC07totO0fqPOLQxonjQg=
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEmDCCAwCgAwIBAgIQVEJFCgU/CZk9JEwTucWPpzANBgkqhkiG9w0BAQsFADCB
|
||||||
|
hTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMS0wKwYDVQQLDCRsdWNp
|
||||||
|
b0BMdWNpb3MtV29yay1NQlAgKEx1Y2lvIEZyYW5jbykxNDAyBgNVBAMMK21rY2Vy
|
||||||
|
dCBsdWNpb0BMdWNpb3MtV29yay1NQlAgKEx1Y2lvIEZyYW5jbykwHhcNMTkwNjAx
|
||||||
|
MDAwMDAwWhcNMjkwOTI5MjMzNTM0WjBYMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxv
|
||||||
|
cG1lbnQgY2VydGlmaWNhdGUxLTArBgNVBAsMJGx1Y2lvQEx1Y2lvcy1Xb3JrLU1C
|
||||||
|
UCAoTHVjaW8gRnJhbmNvKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||||
|
APKm1szJhbO2C1q3UxcszMiRpB155VuzVj+oKkB3Bl79jlmlvOMYiMLFsHq81FKc
|
||||||
|
RtgqnK0oc/Nh8zvx3wrxs++mepciJNcVPQlCXDU4csLV+vh7n3wYm6YCakxgWu2q
|
||||||
|
/R9uZQVO5AZsfF44fa+OLRu+vc0pm5sx+QRk/dfiw1dehci5bYtpLw4wYqglp4IG
|
||||||
|
91uzMSJIaP+/0GOkzTItMfz000xfVP4W1Mqe5dqDmDumvqXMmPzf4zMAbLic6Ox5
|
||||||
|
K5SKa6LIb3T8Lm0DnALRCHlFsOeQViELjgrGh/+Lr6Od9q14g82IgjBBX7Z/ob9o
|
||||||
|
rWGCN6RPXSb96hFgNN/57lkCAwEAAaOBrzCBrDAOBgNVHQ8BAf8EBAMCBaAwEwYD
|
||||||
|
VR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQdvlE4
|
||||||
|
Bdcsjc9oaxjDCRu5FiuZkzBWBgNVHREETzBNggtleGFtcGxlLmNvbYINKi5leGFt
|
||||||
|
cGxlLmNvbYIMZXhhbXBsZS50ZXN0gglsb2NhbGhvc3SHBH8AAAGHEAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggGBAKb2TJ8l+e1eraNwZWizLw5fccAf
|
||||||
|
y59J1JAWdLxZyAI/bkiTlVO3DQoPZpw7XwLhefCvILkwKAL4TtIGGVC9yTb5Q5eg
|
||||||
|
rqGO3FC0yg1fn65Kf1VpVxxUVyoiM5PQ4pFJb4AicAv88rCOLD9FFuE0PKOKU/dm
|
||||||
|
Tw0WgPStoh9wsJ1RXUuTJYZs1nd1kMBlfv9NbLilnL+cR2sLktS54X5XagsBYVlf
|
||||||
|
oapRb0JtABOoQhX3U8QMq8UF8yzceRHNTN9yfLOUrW26s9nKtlWVniNhw1uPxZw9
|
||||||
|
RHM7w9/4+a9LXtEDYg4IP/1mm0ywBoUqy1O6hA73uId+Yi/kFBks/GyYaGjKgYcO
|
||||||
|
23B75tkPGYEdGuGZYLzZNHbXg4V0UxFQG3KA1pUiSnD3bN2Rxs+CMpzORnOeK3xi
|
||||||
|
EooKgAPYsehItoQOMPpccI2xHdSAMWtwUgOKrefUQujkx2Op+KFlspF0+WJ6AZEe
|
||||||
|
2D4hyWaEZsvvILXapwqHDCuN3/jSUlTIqUoE1w==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
pub mod pb {
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/grpc.examples.echo.rs"));
|
||||||
|
}
|
||||||
|
|
||||||
|
use pb::{client::EchoClient, EchoRequest};
|
||||||
|
use tonic::transport::{Certificate, Channel};
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let pem = tokio::fs::read("tonic-examples/data/tls/ca.pem").await?;
|
||||||
|
let ca = Certificate::from_pem(pem);
|
||||||
|
|
||||||
|
let channel = Channel::from_static("http://[::1]:50051")
|
||||||
|
.rustls_tls(ca, Some("example.com".into()))
|
||||||
|
.channel();
|
||||||
|
|
||||||
|
let mut client = EchoClient::new(channel);
|
||||||
|
|
||||||
|
let request = tonic::Request::new(EchoRequest {
|
||||||
|
message: "hello".into(),
|
||||||
|
});
|
||||||
|
|
||||||
|
let response = client.unary_echo(request).await?;
|
||||||
|
|
||||||
|
println!("RESPONSE={:?}", response);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
pub mod pb {
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/grpc.examples.echo.rs"));
|
||||||
|
}
|
||||||
|
|
||||||
|
use pb::{EchoRequest, EchoResponse};
|
||||||
|
use std::collections::VecDeque;
|
||||||
|
use tonic::{transport::{Server, Identity}, Request, Response, Status, Streaming};
|
||||||
|
|
||||||
|
type EchoResult<T> = Result<Response<T>, Status>;
|
||||||
|
type Stream = VecDeque<Result<EchoResponse, Status>>;
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct EchoServer;
|
||||||
|
|
||||||
|
#[tonic::async_trait]
|
||||||
|
impl pb::server::Echo for EchoServer {
|
||||||
|
async fn unary_echo(&self, request: Request<EchoRequest>) -> EchoResult<EchoResponse> {
|
||||||
|
let message = request.into_inner().message;
|
||||||
|
Ok(Response::new(EchoResponse { message }))
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerStreamingEchoStream = Stream;
|
||||||
|
|
||||||
|
async fn server_streaming_echo(
|
||||||
|
&self,
|
||||||
|
_: Request<EchoRequest>,
|
||||||
|
) -> EchoResult<Self::ServerStreamingEchoStream> {
|
||||||
|
Err(Status::unimplemented("not implemented"))
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn client_streaming_echo(
|
||||||
|
&self,
|
||||||
|
_: Request<Streaming<EchoRequest>>,
|
||||||
|
) -> EchoResult<EchoResponse> {
|
||||||
|
Err(Status::unimplemented("not implemented"))
|
||||||
|
}
|
||||||
|
|
||||||
|
type BidirectionalStreamingEchoStream = Stream;
|
||||||
|
|
||||||
|
async fn bidirectional_streaming_echo(
|
||||||
|
&self,
|
||||||
|
_: Request<Streaming<EchoRequest>>,
|
||||||
|
) -> EchoResult<Self::BidirectionalStreamingEchoStream> {
|
||||||
|
Err(Status::unimplemented("not implemented"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let cert = tokio::fs::read("tonic-examples/data/tls/server.pem").await?;
|
||||||
|
let key = tokio::fs::read("tonic-examples/data/tls/server.key").await?;
|
||||||
|
|
||||||
|
let identity = Identity::from_pem(cert, key);
|
||||||
|
|
||||||
|
let addr = "[::1]:50051".parse().unwrap();
|
||||||
|
let server = EchoServer::default();
|
||||||
|
|
||||||
|
Server::builder()
|
||||||
|
.rustls_tls(identity)
|
||||||
|
.clone()
|
||||||
|
.serve(addr, pb::server::EchoServer::new(server))
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user