Skip to content

Commit a414153

Browse files
authored
Merge pull request #681 from cego/ca-expire
Update CA status to expired, and only provide agent with non expired
2 parents d9bd8cc + 27a217e commit a414153

3 files changed

Lines changed: 61 additions & 2 deletions

File tree

server/agent-service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (a *agentService) GetEnrollStatus(ctx context.Context, _ *emptypb.Empty) (*
128128
res.AssignedIP = ip.String()
129129
}
130130

131-
cas, err := a.store.ListCAByNetwork([]string{agent.NetworkName})
131+
cas, err := a.store.ListCAByNetworkNotExpired([]string{agent.NetworkName})
132132
if err != nil {
133133
return nil, status.Error(codes.Internal, "Failed to get certificate authorities for network")
134134
}
@@ -153,7 +153,7 @@ func (a *agentService) GetCertificateAuthorityByNetwork(ctx context.Context, req
153153
return nil, status.Error(codes.PermissionDenied, "")
154154
}
155155

156-
cas, err := a.store.ListCAByNetwork(request.NetworkNames)
156+
cas, err := a.store.ListCAByNetworkNotExpired(request.NetworkNames)
157157
if err != nil {
158158
a.l.WithError(err)
159159
return nil, status.Error(codes.Internal, fmt.Sprintf("%s", err))

server/store/ca.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,25 @@ func (s *Store) ListCAByNetwork(networks []string) ([]*CA, error) {
7272
return cas, nil
7373
}
7474

75+
func (s *Store) ListCAByNetworkNotExpired(networks []string) ([]*CA, error) {
76+
txn := s.db.NewTransaction(false)
77+
defer txn.Discard()
78+
79+
cas, err := s.listCAByNetwork(txn, networks)
80+
if err != nil {
81+
return nil, err
82+
}
83+
84+
validCas := make([]*CA, 0)
85+
for _, ca := range cas {
86+
if ca.Status != CA_Expired {
87+
validCas = append(validCas, ca)
88+
}
89+
}
90+
91+
return validCas, nil
92+
}
93+
7594
func (s *Store) ListCRLByNetwork(networks []string) ([]*protocol.NetworkCRL, error) {
7695
txn := s.db.NewTransaction(false)
7796
defer txn.Discard()
@@ -296,6 +315,37 @@ func (s *Store) RenewCAs() error {
296315
return nil
297316
}
298317

318+
func (s *Store) UpdateExpiredCAs() error {
319+
txn := s.db.NewTransaction(true)
320+
defer txn.Discard()
321+
322+
networks, err := s.listNetworks(txn)
323+
if err != nil {
324+
return fmt.Errorf("failed to get networks %s", err)
325+
}
326+
327+
for _, network := range networks {
328+
cas, err := s.listCAByNetwork(txn, []string{network.Name})
329+
if err != nil {
330+
return fmt.Errorf("failed to get CA` for network: %s", network)
331+
}
332+
333+
for _, ca := range cas {
334+
_, err := s.expireCA(txn, ca)
335+
if err != nil {
336+
return fmt.Errorf("failed to expire CA: %s", err)
337+
}
338+
}
339+
}
340+
341+
err = txn.Commit()
342+
if err != nil {
343+
return fmt.Errorf("failed to commit UpdateExpiredCAs: %v", err)
344+
}
345+
346+
return nil
347+
}
348+
299349
func (s *Store) expireCA(txn *badger.Txn, ca *CA) (bool, error) {
300350
publicKey, _, err := cert.UnmarshalNebulaCertificateFromPEM(ca.PublicKey)
301351
if err != nil {

server/tasks.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func (t *tasks) Start() {
3434
t.renewCerts()
3535
case <-renewCATicker.C:
3636
t.renewCAs()
37+
t.expireCAs()
3738
case <-dbGCTicker.C:
3839
t.dbGC()
3940
case <-t.quit:
@@ -65,6 +66,14 @@ func (t *tasks) renewCAs() {
6566
}
6667
}
6768

69+
func (t *tasks) expireCAs() {
70+
t.l.Infoln("Task: update status for expired ca certificates")
71+
err := t.store.UpdateExpiredCAs()
72+
if err != nil {
73+
t.l.WithError(err).Errorln("error when updating expire for ca certificates")
74+
}
75+
}
76+
6877
func (t *tasks) dbGC() {
6978
t.l.Debugln("Task: db garbage collection")
7079
t.store.GC()

0 commit comments

Comments
 (0)