MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / generate_pki

Function generate_pki

crates/openshell-server/tests/common/mod.rs:499–554  ·  view source on GitHub ↗

Generate a full PKI: CA → server cert (for `localhost`) + client cert. Returns a `TempDir` that must be kept alive while the paths are in use.

()

Source from the content-addressed store, hash-verified

497/// Generate a full PKI: CA → server cert (for `localhost`) + client cert.
498/// Returns a `TempDir` that must be kept alive while the paths are in use.
499pub fn generate_pki() -> (tempfile::TempDir, PkiBundle) {
500 // Generate CA
501 let mut ca_params =
502 CertificateParams::new(Vec::<String>::new()).expect("failed to create CA params");
503 ca_params.is_ca = IsCa::Ca(rcgen::BasicConstraints::Unconstrained);
504 ca_params
505 .distinguished_name
506 .push(rcgen::DnType::CommonName, "test-ca");
507 let ca_key = KeyPair::generate().expect("failed to generate CA key");
508 let ca_cert = ca_params
509 .self_signed(&ca_key)
510 .expect("failed to sign CA cert");
511
512 // Generate server cert signed by CA
513 let server_params = CertificateParams::new(vec!["localhost".to_string()])
514 .expect("failed to create server params");
515 let server_key = KeyPair::generate().expect("failed to generate server key");
516 let server_cert = server_params
517 .signed_by(&server_key, &ca_cert, &ca_key)
518 .expect("failed to sign server cert");
519
520 // Generate client cert signed by CA
521 let mut client_params =
522 CertificateParams::new(Vec::<String>::new()).expect("failed to create client params");
523 client_params
524 .distinguished_name
525 .push(rcgen::DnType::CommonName, "test-client");
526 let client_key = KeyPair::generate().expect("failed to generate client key");
527 let client_cert = client_params
528 .signed_by(&client_key, &ca_cert, &ca_key)
529 .expect("failed to sign client cert");
530
531 let dir = tempdir().expect("failed to create tempdir");
532 let write_file = |name: &str, data: &[u8]| {
533 let path = dir.path().join(name);
534 std::fs::File::create(&path)
535 .and_then(|mut f| f.write_all(data))
536 .expect("failed to write file");
537 };
538
539 write_file("ca.pem", ca_cert.pem().as_bytes());
540 write_file("server-cert.pem", server_cert.pem().as_bytes());
541 write_file("server-key.pem", server_key.serialize_pem().as_bytes());
542 write_file("client-cert.pem", client_cert.pem().as_bytes());
543 write_file("client-key.pem", client_key.serialize_pem().as_bytes());
544
545 let bundle = PkiBundle {
546 ca_cert_pem: ca_cert.pem().into_bytes(),
547 server_cert_pem: server_cert.pem().into_bytes(),
548 server_key_pem: server_key.serialize_pem().into_bytes(),
549 client_cert_pem: client_cert.pem().into_bytes(),
550 client_key_pem: client_key.serialize_pem().into_bytes(),
551 };
552
553 (dir, bundle)
554}
555
556/// Start a TLS-wrapped test server using the given `TlsAcceptor`.

Calls 2

pushMethod · 0.80
pathMethod · 0.80

Tested by

no test coverage detected