@@ -7224,6 +7224,94 @@ func TestGenerateRootCAWithAIA(t *testing.T) {
7224
7224
requireSuccessNonNilResponse (t , resp , err , "expected root generation to succeed" )
7225
7225
}
7226
7226
7227
+ // TestIssuance_AlwaysEnforceErr validates that we properly return an error in all request
7228
+ // types that go beyond the issuer's NotAfter
7229
+ func TestIssuance_AlwaysEnforceErr (t * testing.T ) {
7230
+ t .Parallel ()
7231
+ b , s := CreateBackendWithStorage (t )
7232
+
7233
+ resp , err := CBWrite (b , s , "root/generate/internal" , map [string ]interface {}{
7234
+ "common_name" : "root myvault.com" ,
7235
+ "key_type" : "ec" ,
7236
+ "ttl" : "10h" ,
7237
+ "issuer_name" : "root-ca" ,
7238
+ "key_name" : "root-key" ,
7239
+ })
7240
+ requireSuccessNonNilResponse (t , resp , err , "expected root generation to succeed" )
7241
+
7242
+ resp , err = CBPatch (b , s , "issuer/root-ca" , map [string ]interface {}{
7243
+ "leaf_not_after_behavior" : "always_enforce_err" ,
7244
+ })
7245
+ requireSuccessNonNilResponse (t , resp , err , "failed updating root issuer with always_enforce_err" )
7246
+
7247
+ resp , err = CBWrite (b , s , "roles/test-role" , map [string ]interface {}{
7248
+ "allow_any_name" : true ,
7249
+ "key_type" : "ec" ,
7250
+ "allowed_serial_numbers" : "*" ,
7251
+ })
7252
+
7253
+ expectedErrContains := "cannot satisfy request, as TTL would result in notAfter"
7254
+
7255
+ // Make sure we fail on CA issuance requests now
7256
+ t .Run ("ca-issuance" , func (t * testing.T ) {
7257
+ resp , err = CBWrite (b , s , "intermediate/generate/internal" , map [string ]interface {}{
7258
+ "common_name" : "myint.com" ,
7259
+ })
7260
+ requireSuccessNonNilResponse (t , resp , err , "failed generating intermediary CSR" )
7261
+ requireFieldsSetInResp (t , resp , "csr" )
7262
+ csr := resp .Data ["csr" ]
7263
+
7264
+ _ , err = CBWrite (b , s , "issuer/root-ca/sign-intermediate" , map [string ]interface {}{
7265
+ "csr" : csr ,
7266
+ "use_csr_values" : true ,
7267
+ "ttl" : "60h" ,
7268
+ })
7269
+ require .ErrorContains (t , err , expectedErrContains , "sign-intermediate should have failed as root issuer leaf behavior is set to always_enforce_err" )
7270
+
7271
+ // Make sure it works if we are under
7272
+ resp , err = CBWrite (b , s , "issuer/root-ca/sign-intermediate" , map [string ]interface {}{
7273
+ "csr" : csr ,
7274
+ "use_csr_values" : true ,
7275
+ "ttl" : "30m" ,
7276
+ })
7277
+ requireSuccessNonNilResponse (t , resp , err , "sign-intermediate should have passed with a lower TTL value and always_enforce_err" )
7278
+ })
7279
+
7280
+ // Make sure we fail on leaf csr signing leaf as we always did for 'err'
7281
+ t .Run ("sign-leaf-csr" , func (t * testing.T ) {
7282
+ _ , csrPem := generateTestCsr (t , certutil .ECPrivateKey , 256 )
7283
+
7284
+ resp , err = CBWrite (b , s , "issuer/root-ca/sign/test-role" , map [string ]interface {}{
7285
+ "ttl" : "60h" ,
7286
+ "csr" : csrPem ,
7287
+ })
7288
+ require .ErrorContains (t , err , expectedErrContains , "expected error from sign csr got: %v" , resp )
7289
+
7290
+ // Make sure it works if we are under
7291
+ resp , err = CBWrite (b , s , "issuer/root-ca/sign/test-role" , map [string ]interface {}{
7292
+ "ttl" : "30m" ,
7293
+ "csr" : csrPem ,
7294
+ })
7295
+ requireSuccessNonNilResponse (t , resp , err , "sign should have succeeded with a lower TTL and always_enforce_err" )
7296
+ })
7297
+
7298
+ // Make sure we fail on leaf csr signing leaf as we always did for 'err'
7299
+ t .Run ("issue-leaf-csr" , func (t * testing.T ) {
7300
+ resp , err = CBWrite (b , s , "issuer/root-ca/issue/test-role" , map [string ]interface {}{
7301
+ "ttl" : "60h" ,
7302
+ "common_name" : "leaf.example.com" ,
7303
+ })
7304
+ require .ErrorContains (t , err , expectedErrContains , "expected error from issue got: %v" , resp )
7305
+
7306
+ // Make sure it works if we are under
7307
+ resp , err = CBWrite (b , s , "issuer/root-ca/issue/test-role" , map [string ]interface {}{
7308
+ "ttl" : "30m" ,
7309
+ "common_name" : "leaf.example.com" ,
7310
+ })
7311
+ requireSuccessNonNilResponse (t , resp , err , "issue should have worked with a lower TTL and always_enforce_err" )
7312
+ })
7313
+ }
7314
+
7227
7315
var (
7228
7316
initTest sync.Once
7229
7317
rsaCAKey string
0 commit comments