@@ -189,13 +189,15 @@ pub struct DockerComputeConfig {
189189 /// Image containing the trusted `openshell-supervisor` binary.
190190 pub supervisor_image : Option < String > ,
191191
192- /// Host-side CA certificate for Docker sandbox mTLS .
192+ /// Host-side CA certificate for sandbox-to-gateway TLS .
193193 pub guest_tls_ca : Option < PathBuf > ,
194194
195- /// Host-side client certificate for Docker sandbox mTLS.
195+ /// Deprecated. Sandboxes authenticate with bearer tokens and must not
196+ /// receive a user client certificate.
196197 pub guest_tls_cert : Option < PathBuf > ,
197198
198- /// Host-side private key for Docker sandbox mTLS.
199+ /// Deprecated. Sandboxes authenticate with bearer tokens and must not
200+ /// receive a user client private key.
199201 pub guest_tls_key : Option < PathBuf > ,
200202
201203 /// Unix socket path used for interactive sandbox access.
@@ -293,8 +295,6 @@ impl Default for DockerComputeConfig {
293295#[ derive( Debug , Clone , PartialEq , Eq ) ]
294296pub ( crate ) struct DockerGuestTlsPaths {
295297 pub ( crate ) ca : PathBuf ,
296- pub ( crate ) cert : PathBuf ,
297- pub ( crate ) key : PathBuf ,
298298}
299299
300300#[ derive( Debug , Clone ) ]
@@ -4676,11 +4676,7 @@ async fn docker_supervisor_bundle_archive(
46764676 SUPERVISOR_UID ,
46774677 SUPERVISOR_GID ,
46784678 ) ?;
4679- for ( name, path) in [
4680- ( "ca.pem" , & tls. ca ) ,
4681- ( "cert.pem" , & tls. cert ) ,
4682- ( "key.pem" , & tls. key ) ,
4683- ] {
4679+ for ( name, path) in [ ( "ca.pem" , & tls. ca ) ] {
46844680 let contents = tokio:: fs:: read ( path) . await . map_err ( |error| {
46854681 Status :: internal ( format ! (
46864682 "read Docker supervisor TLS file {}: {error}" ,
@@ -5097,20 +5093,10 @@ async fn spawn_docker_control_process(
50975093 ) ,
50985094 ] ;
50995095 if config. guest_tls . is_some ( ) {
5100- environment. extend ( [
5101- format ! (
5102- "{}={SUPERVISOR_STATE_MOUNT_PATH}/tls/ca.pem" ,
5103- openshell_core:: sandbox_env:: TLS_CA
5104- ) ,
5105- format ! (
5106- "{}={SUPERVISOR_STATE_MOUNT_PATH}/tls/cert.pem" ,
5107- openshell_core:: sandbox_env:: TLS_CERT
5108- ) ,
5109- format ! (
5110- "{}={SUPERVISOR_STATE_MOUNT_PATH}/tls/key.pem" ,
5111- openshell_core:: sandbox_env:: TLS_KEY
5112- ) ,
5113- ] ) ;
5096+ environment. push ( format ! (
5097+ "{}={SUPERVISOR_STATE_MOUNT_PATH}/tls/ca.pem" ,
5098+ openshell_core:: sandbox_env:: TLS_CA
5099+ ) ) ;
51145100 }
51155101 if let Some ( socket) = config. provider_spiffe_workload_api_socket . as_ref ( ) {
51165102 let projected = openshell_core:: driver_utils:: projected_provider_spiffe_socket_path ( socket)
@@ -6505,8 +6491,6 @@ fn canonicalize_existing_file(path: &Path, description: &str) -> CoreResult<Path
65056491
65066492fn docker_guest_tls_configured ( docker_config : & DockerComputeConfig ) -> bool {
65076493 docker_config. guest_tls_ca . is_some ( )
6508- && docker_config. guest_tls_cert . is_some ( )
6509- && docker_config. guest_tls_key . is_some ( )
65106494}
65116495
65126496fn default_docker_supervisor_grpc_endpoint ( gateway_port : u16 , tls : bool ) -> String {
@@ -6521,24 +6505,25 @@ pub(crate) fn docker_guest_tls_paths(
65216505 || docker_config. guest_tls_cert . is_some ( )
65226506 || docker_config. guest_tls_key . is_some ( ) ;
65236507
6508+ if docker_config. guest_tls_cert . is_some ( ) || docker_config. guest_tls_key . is_some ( ) {
6509+ return Err ( Error :: config (
6510+ "guest_tls_cert and guest_tls_key are no longer supported; sandboxes authenticate to the gateway with bearer tokens" ,
6511+ ) ) ;
6512+ }
6513+
65246514 if !docker_config. grpc_endpoint . starts_with ( "https://" ) {
65256515 if tls_flags_provided {
65266516 return Err ( Error :: config ( format ! (
6527- "guest_tls_ca/guest_tls_cert/guest_tls_key were provided but grpc_endpoint is '{}'; TLS materials require an https:// endpoint" ,
6517+ "guest_tls_ca was provided but grpc_endpoint is '{}'; TLS materials require an https:// endpoint" ,
65286518 docker_config. grpc_endpoint,
65296519 ) ) ) ;
65306520 }
65316521 return Ok ( None ) ;
65326522 }
65336523
6534- let provided = [
6535- docker_config. guest_tls_ca . as_ref ( ) ,
6536- docker_config. guest_tls_cert . as_ref ( ) ,
6537- docker_config. guest_tls_key . as_ref ( ) ,
6538- ] ;
6539- if provided. iter ( ) . all ( Option :: is_none) {
6524+ if docker_config. guest_tls_ca . is_none ( ) {
65406525 return Err ( Error :: config (
6541- "docker compute driver requires guest_tls_ca, guest_tls_cert, and guest_tls_key when grpc_endpoint uses https://" ,
6526+ "docker compute driver requires guest_tls_ca when grpc_endpoint uses https://" ,
65426527 ) ) ;
65436528 }
65446529
@@ -6547,21 +6532,8 @@ pub(crate) fn docker_guest_tls_paths(
65476532 "guest_tls_ca is required when Docker sandbox TLS materials are configured" ,
65486533 ) ) ;
65496534 } ;
6550- let Some ( cert) = docker_config. guest_tls_cert . clone ( ) else {
6551- return Err ( Error :: config (
6552- "guest_tls_cert is required when Docker sandbox TLS materials are configured" ,
6553- ) ) ;
6554- } ;
6555- let Some ( key) = docker_config. guest_tls_key . clone ( ) else {
6556- return Err ( Error :: config (
6557- "guest_tls_key is required when Docker sandbox TLS materials are configured" ,
6558- ) ) ;
6559- } ;
6560-
65616535 Ok ( Some ( DockerGuestTlsPaths {
65626536 ca : canonicalize_existing_file ( & ca, "docker TLS CA certificate" ) ?,
6563- cert : canonicalize_existing_file ( & cert, "docker TLS client certificate" ) ?,
6564- key : canonicalize_existing_file ( & key, "docker TLS client private key" ) ?,
65656537 } ) )
65666538}
65676539
0 commit comments