@@ -6,8 +6,9 @@ use dstack_guest_agent_rpc::{
66 dstack_guest_server:: { DstackGuestRpc , DstackGuestServer } ,
77 tappd_server:: { TappdRpc , TappdServer } ,
88 worker_server:: { WorkerRpc , WorkerServer } ,
9- DeriveK256KeyResponse , GetKeyArgs , GetKeyResponse , GetQuoteResponse , GetTlsKeyArgs ,
10- GetTlsKeyResponse , RawQuoteArgs , TdxQuoteArgs , TdxQuoteResponse , WorkerInfo , WorkerVersion ,
9+ DeriveK256KeyResponse , DeriveKeyArgs , GetKeyArgs , GetKeyResponse , GetQuoteResponse ,
10+ GetTlsKeyArgs , GetTlsKeyResponse , RawQuoteArgs , TdxQuoteArgs , TdxQuoteResponse , WorkerInfo ,
11+ WorkerVersion ,
1112} ;
1213use dstack_types:: AppKeys ;
1314use fs_err as fs;
@@ -82,17 +83,12 @@ pub struct InternalRpcHandler {
8283
8384impl DstackGuestRpc for InternalRpcHandler {
8485 async fn get_tls_key ( self , request : GetTlsKeyArgs ) -> anyhow:: Result < GetTlsKeyResponse > {
85- let mut mbuf = [ 0u8 ; 32 ] ;
86- let seed = if request. random_seed {
87- SystemRandom :: new ( )
88- . fill ( & mut mbuf)
89- . context ( "Failed to generate secure seed" ) ?;
90- & mbuf[ ..]
91- } else {
92- & self . state . inner . keys . k256_key
93- } ;
94- let derived_key = derive_ecdsa_key_pair_from_bytes ( seed, & [ request. path . as_bytes ( ) ] )
95- . context ( "Failed to derive key" ) ?;
86+ let mut seed = [ 0u8 ; 32 ] ;
87+ SystemRandom :: new ( )
88+ . fill ( & mut seed)
89+ . context ( "Failed to generate secure seed" ) ?;
90+ let derived_key =
91+ derive_ecdsa_key_pair_from_bytes ( & seed, & [ ] ) . context ( "Failed to derive key" ) ?;
9692 let config = CertConfig {
9793 org_name : None ,
9894 subject : request. subject ,
@@ -179,10 +175,37 @@ pub struct InternalRpcHandlerV0 {
179175}
180176
181177impl TappdRpc for InternalRpcHandlerV0 {
182- async fn derive_key ( self , request : GetTlsKeyArgs ) -> anyhow:: Result < GetTlsKeyResponse > {
183- InternalRpcHandler { state : self . state }
184- . get_tls_key ( request)
178+ async fn derive_key ( self , request : DeriveKeyArgs ) -> anyhow:: Result < GetTlsKeyResponse > {
179+ let mut mbuf = [ 0u8 ; 32 ] ;
180+ let seed = if request. random_seed {
181+ SystemRandom :: new ( )
182+ . fill ( & mut mbuf)
183+ . context ( "Failed to generate secure seed" ) ?;
184+ & mbuf[ ..]
185+ } else {
186+ & self . state . inner . keys . k256_key
187+ } ;
188+ let derived_key = derive_ecdsa_key_pair_from_bytes ( seed, & [ request. path . as_bytes ( ) ] )
189+ . context ( "Failed to derive key" ) ?;
190+ let config = CertConfig {
191+ org_name : None ,
192+ subject : request. subject ,
193+ subject_alt_names : request. alt_names ,
194+ usage_server_auth : request. usage_server_auth ,
195+ usage_client_auth : request. usage_client_auth ,
196+ ext_quote : request. usage_ra_tls ,
197+ } ;
198+ let certificate_chain = self
199+ . state
200+ . inner
201+ . cert_client
202+ . request_cert ( & derived_key, config)
185203 . await
204+ . context ( "Failed to sign the CSR" ) ?;
205+ Ok ( GetTlsKeyResponse {
206+ key : derived_key. serialize_pem ( ) ,
207+ certificate_chain,
208+ } )
186209 }
187210
188211 async fn derive_k256_key ( self , request : GetKeyArgs ) -> Result < DeriveK256KeyResponse > {
0 commit comments