@@ -501,10 +501,6 @@ func (b *keyfactorBackend) pathIssueSignCert(ctx context.Context, req *logical.R
501
501
}
502
502
503
503
func (b * keyfactorBackend ) pathRevokeCert (ctx context.Context , req * logical.Request , data * framework.FieldData ) (* logical.Response , error ) {
504
- if b .System ().ReplicationState ().HasState (consts .ReplicationPerformanceStandby ) {
505
- return nil , logical .ErrReadOnly
506
- }
507
-
508
504
serial := data .Get ("serial" ).(string )
509
505
b .Logger ().Debug ("serial = " + serial )
510
506
@@ -525,30 +521,35 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
525
521
return nil , nil
526
522
}
527
523
524
+ serial = strings .ToUpper (serial )
525
+
528
526
// get client
529
527
client , err := b .getClient (ctx , req .Storage )
530
528
if err != nil {
531
529
return nil , fmt .Errorf ("error getting client: %w" , err )
532
530
}
533
531
532
+ b .Logger ().Debug (fmt .Sprintf ("retreiving the keyfactor ID for cert stored at path: %s" , "kfId/" + serial ))
533
+
534
534
kfId , err := req .Storage .Get (ctx , "kfId/" + serial ) //retrieve the keyfactor certificate ID, keyed by sn here
535
535
if err != nil {
536
- b .Logger ().Error ("Unable to retreive Keyfactor certificate ID for cert with serial: " + serial , err )
536
+ b .Logger ().Error ("unable to retreive Keyfactor certificate ID for cert with serial: " + serial , err )
537
537
return nil , err
538
538
}
539
-
540
- var keyfactorId int
539
+ b . Logger (). Debug ( fmt . Sprintf ( "retreived the logical storage entry, decoding..." ))
540
+ var keyfactorId int32
541
541
err = kfId .DecodeJSON (& keyfactorId )
542
-
543
542
if err != nil {
544
543
b .Logger ().Error ("Unable to parse stored certificate ID for cert with serial: " + serial , err )
545
544
return nil , err
546
545
}
547
546
547
+ b .Logger ().Debug (fmt .Sprintf ("decoded keyfactor ID value: %d" , keyfactorId ))
548
+
548
549
// set up keyfactor api request
549
550
//url := b.cachedConfig.KeyfactorUrl + "/" + b.cachedConfig.CommandAPIPath + kf_revoke_path
550
551
551
- certIds := []int32 {int32 ( keyfactorId ) }
552
+ certIds := []int32 {keyfactorId }
552
553
revokeReason := v1 .KeyfactorPKIEnumsRevokeCode (0 )
553
554
effectiveDate := time .Now ().UTC ()
554
555
revokeComment := "via Hashicorp Vault"
@@ -563,29 +564,30 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
563
564
}
564
565
565
566
// create the api call wrapper object
566
- apiReq := client .V1 .CertificateApi .NewCreateCertificatesRevokeRequest (ctx )
567
-
568
- // apply the request parameters to the pending request
569
- apiReq .CertificatesRevokeCertificateRequest (revokeReq )
567
+ apiReq := client .V1 .CertificateApi .NewCreateCertificatesRevokeRequest (ctx ).CertificatesRevokeCertificateRequest (revokeReq )
570
568
571
569
// execute request
572
570
573
571
_ , httpResponse , err := apiReq .Execute ()
574
572
575
573
if err != nil {
576
- b .Logger ().Error ("Revoke failed: {{err}} " , err )
577
- return nil , err
574
+ b .Logger ().Error (fmt . Sprintf ( "revocation failed: %s \n %s " , err , httpResponse . Body ) )
575
+ return nil , fmt . Errorf ( "revocation failed. \n http status: %s \n response body: %s" , httpResponse . Status , httpResponse . Body )
578
576
}
579
577
580
578
if httpResponse .StatusCode != 204 && httpResponse .StatusCode != 200 {
581
579
b .Logger ().Info ("revocation failed: server returned" + fmt .Sprint (httpResponse .StatusCode ))
582
580
b .Logger ().Info ("error response = " + fmt .Sprint (httpResponse .Body ))
583
- return nil , fmt .Errorf ("revocation failed: server returned %s\n " , httpResponse .Status )
581
+ return nil , fmt .Errorf ("revocation failed: server returned %s\n %s " , httpResponse .Status , httpResponse . Body )
584
582
}
585
583
586
584
alreadyRevoked := false
587
585
var revInfo revocationInfo
588
586
587
+ b .Logger ().Debug ("revocation request was successful." )
588
+
589
+ b .Logger ().Debug ("updating values if previously revoked.." )
590
+
589
591
revEntry , err := fetchCertBySerial (ctx , req , "revoked/" , serial )
590
592
if err != nil {
591
593
switch err .(type ) {
@@ -604,6 +606,7 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
604
606
}
605
607
}
606
608
609
+ b .Logger ().Debug ("updating local storage entry.." )
607
610
if ! alreadyRevoked {
608
611
certEntry , err := fetchCertBySerial (ctx , req , "certs/" , serial )
609
612
if err != nil {
@@ -615,13 +618,6 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
615
618
}
616
619
}
617
620
if certEntry == nil {
618
- if fromLease {
619
- // We can't write to revoked/ or update the CRL anyway because we don't have the cert,
620
- // and there's no reason to expect this will work on a subsequent
621
- // retry. Just give up and let the lease get deleted.
622
- b .Logger ().Warn ("expired certificate revoke failed because not found in storage, treating as success" , "serial" , serial )
623
- return nil , nil
624
- }
625
621
return logical .ErrorResponse (fmt .Sprintf ("certificate with serial %s not found" , serial )), nil
626
622
}
627
623
b .Logger ().Debug ("certEntry key = " + certEntry .Key )
@@ -693,19 +689,6 @@ func checkAllowedDomains(role *roleEntry, roleName string, domains []string) (bo
693
689
return true , nil
694
690
}
695
691
696
- // func (b *keyfactorBackend) isValidJSON(str string) bool {
697
- // var js map[string]interface{}
698
- // err := json.Unmarshal([]byte(str), &js)
699
-
700
- // if err != nil {
701
- // b.Logger().Debug(err.Error())
702
- // return false
703
- // } else {
704
- // b.Logger().Debug("the metadata was able to be parsed as valid JSON")
705
- // return true
706
- // }
707
- // }
708
-
709
692
const pathIssueHelpSyn = `
710
693
Request a certificate using a certain role with the provided details.
711
694
example: vault write keyfactor/issue/<role> common_name=<cn> dns_sans=<dns sans>
0 commit comments