added support for self signed TLS certificates

This commit is contained in:
ghe0 2025-03-28 17:47:20 +02:00
parent e4f2cf2be3
commit c3b62a397d
Signed by: ghe0
GPG Key ID: 451028EE56A0FBB4
7 changed files with 38 additions and 11 deletions

4
Cargo.lock generated

@ -1561,7 +1561,9 @@ version = "0.23.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8"
dependencies = [
"log",
"once_cell",
"ring",
"rustls-pki-types",
"rustls-webpki",
"subtle",
@ -2009,8 +2011,10 @@ dependencies = [
"percent-encoding",
"pin-project",
"prost",
"rustls-pemfile",
"socket2",
"tokio",
"tokio-rustls",
"tokio-stream",
"tower 0.4.13",
"tower-layer",

@ -8,7 +8,7 @@ env_logger = "0.11.6"
prost = "0.13.4"
prost-types = "0.13.4"
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread", "fs"] }
tonic = "0.12.3"
tonic = { version = "0.12", features = ["tls"] }
reqwest = { version = "0.12.12", features = ["blocking"] }
flate2 = "1.0.35"
tar = "0.4.43"

@ -21,6 +21,7 @@ wget -q --show-progress -O /usr/local/bin/detee-sgx-daemon https://registry.dete
wget -q --show-progress -O /etc/systemd/system/detee-sgx-daemon.service https://registry.detee.ltd/sgx/daemon/detee-sgx-daemon.service
wget -q --show-progress -O /etc/detee/app_daemon/sample_config.yaml https://registry.detee.ltd/sgx/daemon/sample_config.yaml
chmod +x /usr/local/bin/detee-sgx-daemon
wget -q --show-progress -O /etc/detee/root_ca.pem https://registry.detee.ltd/root_ca.pem
echo "Take a look at /etc/detee/app_daemon/sample_config.yaml"
echo "Modify config based on your setup and save it to /etc/detee/app_daemon/config.yaml"
@ -29,4 +30,4 @@ read my_var
echo "Starting detee-sgx-daemon..."
systemctl daemon-reload
systemctl start detee-sgx-daemon.service
systemctl start detee-sgx-daemon.service

@ -6,7 +6,7 @@ use crate::global::IP_INFO;
#[derive(Debug, Clone, Deserialize)]
pub struct HostConfig {
pub brain_url: String,
pub network: String,
#[serde(default = "retrieve_node_ip")]
pub host_ip_address: String,
pub operator_wallet: String,

@ -6,6 +6,9 @@ use std::fs::File;
use std::io::{Read, Write};
use std::sync::LazyLock;
pub const DETEE_ROOT_CA: &str = "/etc/detee/root_ca.pem";
pub const BRAIN_STAGING: (&str, &str) = ("https://159.65.58.38:31337", "staging-brain");
pub const BRAIN_TESTING: (&str, &str) = ("https://164.92.249.180:31337", "testing-brain");
pub const PACKAGE_ARCHIVE_POSTFIX: &str = "-enclave_package.tar.gz";
pub const PACKAGE_ARCHIVE_DIR_PATH: &str = "./enclave_archives";
pub const PACKAGE_DIR_PATH: &str = "./enclaves";

@ -9,22 +9,41 @@ use tokio::task::JoinSet;
use tokio_stream::wrappers::ReceiverStream;
use tokio_stream::StreamExt;
use tonic::metadata::AsciiMetadataValue;
use tonic::transport::Channel;
use tonic::transport::{Certificate, Channel, ClientTlsConfig};
use tonic::Request;
use crate::global::IP_INFO;
use crate::global::PUBLIC_KEY;
use crate::global::{IP_INFO, PUBLIC_KEY, BRAIN_STAGING, BRAIN_TESTING, DETEE_ROOT_CA};
pub struct ConnectionData {
pub brain_url: String,
pub network: String,
pub brain_msg_tx: Sender<BrainMessageApp>,
pub daemon_msg_rx: Receiver<DaemonMessageApp>,
pub daemon_msg_tx: Sender<DaemonMessageApp>,
pub app_contracts_uuid: Vec<String>,
}
pub async fn client(network: &str) -> Result<BrainAppDaemonClient<Channel>> {
let (brain_url, brain_san) = match network {
"staging" => BRAIN_STAGING,
"testnet" => BRAIN_TESTING,
_ => {
return Err(anyhow::anyhow!(
"The only networks currently supported are staging and testnet."
))
}
};
let pem = std::fs::read_to_string(DETEE_ROOT_CA)?;
let ca = Certificate::from_pem(pem);
let tls = ClientTlsConfig::new().ca_certificate(ca).domain_name(brain_san);
let channel = Channel::from_shared(brain_url.to_string())?.tls_config(tls)?.connect().await?;
Ok(BrainAppDaemonClient::new(channel))
}
pub async fn register_node(config: &crate::HostConfig) -> Result<Vec<AppContract>> {
let mut client = BrainAppDaemonClient::connect(config.brain_url.clone()).await?;
let mut client = client(&config.network).await?;
log::debug!("registering node with brain");
@ -71,7 +90,7 @@ pub async fn register_node(config: &crate::HostConfig) -> Result<Vec<AppContract
}
pub async fn connect_and_run(conn_data: ConnectionData) -> Result<()> {
let client = BrainAppDaemonClient::connect(conn_data.brain_url).await?;
let client = client(&conn_data.network).await?;
let mut streaming_tasks = JoinSet::new();

@ -197,7 +197,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let (daemon_msg_tx, daemon_msg_rx) = tokio::sync::mpsc::channel(6);
let mut app_handler = AppHandler::new(brain_msg_rx, daemon_msg_tx.clone());
let brain_url = app_handler.host_config.brain_url.clone();
let network = app_handler.host_config.network.clone();
let mut contracts = vec![];
match grpc::register_node(&app_handler.host_config).await {
@ -215,7 +215,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
log::info!("Connecting to brain...");
if let Err(e) = grpc::connect_and_run(grpc::ConnectionData {
brain_url,
network,
brain_msg_tx,
daemon_msg_rx,
daemon_msg_tx,