netreplay generates certificates

This commit is contained in:
Pascal Engélibert 2026-08-25 10:27:01 +02:00
commit 49dc671c31
4 changed files with 85 additions and 11 deletions

27
exp.py
View file

@ -127,14 +127,16 @@ CONFIGS = {
"server",
],
"tls": [
#False,
False,
True,
],
"records": [
{ "filename": "wp2", "repeat": 10000, "time": 600, "reproduce": 1 },
{ "filename": "yt2-ads", "repeat": 10000, "time": 1200, "reproduce": 1 },
{ "filename": "yt2-ublock", "repeat": 10000, "time": 1200, "reproduce": 1 },
#{ "filename": "wp2", "repeat": 10000, "time": 600, "reproduce": 1 },
#{ "filename": "yt2-ads", "repeat": 10000, "time": 1200, "reproduce": 1 },
#{ "filename": "yt2-ublock", "repeat": 10000, "time": 1200, "reproduce": 1 },
#{ "filename": "wp2", "repeat": 10000, "time": 300, "reproduce": 100 },
#{ "filename": "guardian", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 1 },
{ "filename": "wikipedia", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
],
"repo_dir": "/home/tuxmain/reps/tlsbench",
"exp_dir": "/dev/shm/exp",
@ -340,6 +342,7 @@ DOMAINS_ = [
# Firefox extensions
"addons.mozilla.org",
]
DOMAINS_ = []
CERT_SIGN_ALGS = [
"prime256v1", # widely used
@ -348,8 +351,8 @@ CERT_SIGN_ALGS = [
"rsa2048", "rsa3072", "rsa4096", # widely used
]
IMPLS = [
#"aws-lc", # Amazon's crypto widely used in Rust stuff
#"boring", # Google's fork of OpenSSL used in Chrome and Android
"aws-lc", # Amazon's crypto widely used in Rust stuff
"boring", # Google's fork of OpenSSL used in Chrome and Android
#"graviola", # New crypto in Rust
"openssl", # widely used
#"openssl-static",
@ -615,11 +618,16 @@ def make_everything(exp_dir, domains, make_ca):
if exp_dir[-1] != "/":
exp_dir += "/"
os.makedirs(exp_dir, exist_ok=True)
realistic_dir = exp_dir+"certs/realistic/"
os.makedirs(realistic_dir, exist_ok=True)
for alg in CERT_SIGN_ALGS:
algdir = exp_dir+"certs/"+alg
os.makedirs(algdir, exist_ok=True)
make_certs(algdir, domains, alg, make_ca)
make_sk(realistic_dir+"ca_"+alg+".key", alg)
make_ca_cert(realistic_dir+"ca_"+alg+".crt", realistic_dir+"ca_"+alg+".key")
def run_netreplay_server(ssh, exp_dir, repo_dir, record, listen_addr, listen_port, tls, impl, certs_dir, only_record=None, ciphers=None, kexes=None, debug=False, ld_preload=None):
if exp_dir[-1] != "/":
exp_dir += "/"
@ -866,6 +874,9 @@ def run_exp(config, only_record=None, idle=False, shutdown=False, debug=False):
continue
for side in config["sides"]:
for record in config["records"]:
server_certs_dir = certs_dir
if record.get("realistic", False):
server_certs_dir = exp_dir+"/fake/"+record["filename"]
for reprod_i in range(record.get("reproduce", 1)):
print(f"EXPERIMENT {expname}: {impl} {alg} {kex} {cipher} ED={earlydata} {side} TLS={tls}")
@ -881,7 +892,7 @@ def run_exp(config, only_record=None, idle=False, shutdown=False, debug=False):
config["listen_port"],
tls,
None,
certs_dir,
server_certs_dir,
only_record=only_record,
ciphers=cipher,
kexes=kex,
@ -918,7 +929,7 @@ def run_exp(config, only_record=None, idle=False, shutdown=False, debug=False):
config["listen_port"],
tls,
impl,
certs_dir,
server_certs_dir,
only_record=only_record,
ciphers=cipher,
kexes=kex,