@@ -73,6 +73,7 @@ func makeCertificate() (serialNumber *big.Int, cert *x509.Certificate, pemBytes
7373 Organization : []string {"Cornell CS 5152" },
7474 },
7575 AuthorityKeyId : []byte {42 , 42 , 42 , 42 },
76+ NotAfter : time .Now (),
7677 }
7778 cert = & template
7879
@@ -91,9 +92,9 @@ func makeCertificate() (serialNumber *big.Int, cert *x509.Certificate, pemBytes
9192 Subject : pkix.Name {
9293 Organization : []string {"Cornell CS 5152" },
9394 },
94- AuthorityKeyId : []byte {42 , 42 , 42 , 42 },
95- KeyUsage : x509 .KeyUsageKeyEncipherment | x509 .KeyUsageDigitalSignature | x509 .KeyUsageCertSign ,
96- IsCA : true ,
95+ AuthorityKeyId : []byte {42 , 42 , 42 , 42 },
96+ KeyUsage : x509 .KeyUsageKeyEncipherment | x509 .KeyUsageDigitalSignature | x509 .KeyUsageCertSign ,
97+ IsCA : true ,
9798 BasicConstraintsValid : true ,
9899 }
99100 issuerBytes , err := x509 .CreateCertificate (rand .Reader , & issuerTemplate , & issuerTemplate , & privKey .PublicKey , privKey )
@@ -153,10 +154,11 @@ func TestInsertValidCertificate(t *testing.T) {
153154 }
154155
155156 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
156- "serial_number" : serialNumber .Text (16 ),
157+ "serial_number" : serialNumber .Text (10 ),
157158 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
158159 "status" : "good" ,
159160 "pem" : string (pemBytes ),
161+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
160162 })
161163
162164 if resp .StatusCode != http .StatusOK {
@@ -179,7 +181,7 @@ func TestInsertValidCertificate(t *testing.T) {
179181 t .Fatal ("Could not parse returned OCSP response" , err )
180182 }
181183
182- ocsps , err := dbAccessor .GetOCSP (serialNumber .Text (16 ), hex .EncodeToString (cert .AuthorityKeyId ))
184+ ocsps , err := dbAccessor .GetOCSP (serialNumber .Text (10 ), hex .EncodeToString (cert .AuthorityKeyId ))
183185 if err != nil {
184186 t .Fatal (err )
185187 }
@@ -223,6 +225,7 @@ func TestInsertMissingSerial(t *testing.T) {
223225 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
224226 "status" : "good" ,
225227 "pem" : string (pemBytes ),
228+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
226229 })
227230
228231 if resp .StatusCode != http .StatusBadRequest {
@@ -236,16 +239,41 @@ func TestInsertMissingAKI(t *testing.T) {
236239 t .Fatal (err )
237240 }
238241
239- serialNumber , _ , pemBytes , signer , err := makeCertificate ()
242+ serialNumber , cert , pemBytes , signer , err := makeCertificate ()
240243
241244 if err != nil {
242245 t .Fatal (err )
243246 }
244247
245248 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
246- "serial_number" : serialNumber .Text (16 ),
249+ "serial_number" : serialNumber .Text (10 ),
247250 "status" : "good" ,
248251 "pem" : string (pemBytes ),
252+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
253+ })
254+
255+ if resp .StatusCode != http .StatusBadRequest {
256+ t .Fatal ("Expected HTTP Bad Request" , resp .StatusCode , string (body ))
257+ }
258+ }
259+
260+ func TestInsertMissingExpiry (t * testing.T ) {
261+ dbAccessor , err := prepDB ()
262+ if err != nil {
263+ t .Fatal (err )
264+ }
265+
266+ serialNumber , cert , pemBytes , signer , err := makeCertificate ()
267+
268+ if err != nil {
269+ t .Fatal (err )
270+ }
271+
272+ resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
273+ "serial_number" : serialNumber .Text (10 ),
274+ "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
275+ "status" : "good" ,
276+ "pem" : string (pemBytes ),
249277 })
250278
251279 if resp .StatusCode != http .StatusBadRequest {
@@ -266,9 +294,10 @@ func TestInsertMissingPEM(t *testing.T) {
266294 }
267295
268296 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
269- "serial_number" : serialNumber .Text (16 ),
297+ "serial_number" : serialNumber .Text (10 ),
270298 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
271299 "status" : "good" ,
300+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
272301 })
273302
274303 if resp .StatusCode != http .StatusBadRequest {
@@ -293,6 +322,7 @@ func TestInsertInvalidSerial(t *testing.T) {
293322 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
294323 "status" : "good" ,
295324 "pem" : string (pemBytes ),
325+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
296326 })
297327
298328 if resp .StatusCode != http .StatusBadRequest {
@@ -306,17 +336,18 @@ func TestInsertInvalidAKI(t *testing.T) {
306336 t .Fatal (err )
307337 }
308338
309- serialNumber , _ , pemBytes , signer , err := makeCertificate ()
339+ serialNumber , cert , pemBytes , signer , err := makeCertificate ()
310340
311341 if err != nil {
312342 t .Fatal (err )
313343 }
314344
315345 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
316- "serial_number" : serialNumber .Text (16 ),
346+ "serial_number" : serialNumber .Text (10 ),
317347 "authority_key_identifier" : "this is not an AKI" ,
318348 "status" : "good" ,
319349 "pem" : string (pemBytes ),
350+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
320351 })
321352
322353 if resp .StatusCode != http .StatusBadRequest {
@@ -337,10 +368,11 @@ func TestInsertInvalidStatus(t *testing.T) {
337368 }
338369
339370 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
340- "serial_number" : serialNumber .Text (16 ),
371+ "serial_number" : serialNumber .Text (10 ),
341372 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
342373 "status" : "invalid" ,
343374 "pem" : string (pemBytes ),
375+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
344376 })
345377
346378 if resp .StatusCode != http .StatusBadRequest {
@@ -361,10 +393,36 @@ func TestInsertInvalidPEM(t *testing.T) {
361393 }
362394
363395 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
364- "serial_number" : serialNumber .Text (16 ),
396+ "serial_number" : serialNumber .Text (10 ),
365397 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
366398 "status" : "good" ,
367399 "pem" : "this is not a PEM certificate" ,
400+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
401+ })
402+
403+ if resp .StatusCode != http .StatusBadRequest {
404+ t .Fatal ("Expected HTTP Bad Request, got" , resp .StatusCode , string (body ))
405+ }
406+ }
407+
408+ func TestInsertInvalidExpiry (t * testing.T ) {
409+ dbAccessor , err := prepDB ()
410+ if err != nil {
411+ t .Fatal (err )
412+ }
413+
414+ serialNumber , cert , pemBytes , signer , err := makeCertificate ()
415+
416+ if err != nil {
417+ t .Fatal (err )
418+ }
419+
420+ resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
421+ "serial_number" : serialNumber .Text (10 ),
422+ "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
423+ "status" : "good" ,
424+ "pem" : string (pemBytes ),
425+ "expiry" : "this is not an expiry" ,
368426 })
369427
370428 if resp .StatusCode != http .StatusBadRequest {
@@ -385,10 +443,11 @@ func TestInsertWrongSerial(t *testing.T) {
385443 }
386444
387445 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
388- "serial_number" : big .NewInt (1 ).Text (16 ),
446+ "serial_number" : big .NewInt (1 ).Text (10 ),
389447 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
390448 "status" : "good" ,
391449 "pem" : string (pemBytes ),
450+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
392451 })
393452
394453 if resp .StatusCode != http .StatusBadRequest {
@@ -402,17 +461,43 @@ func TestInsertWrongAKI(t *testing.T) {
402461 t .Fatal (err )
403462 }
404463
464+ serialNumber , cert , pemBytes , signer , err := makeCertificate ()
465+
466+ if err != nil {
467+ t .Fatal (err )
468+ }
469+
470+ resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
471+ "serial_number" : serialNumber .Text (10 ),
472+ "authority_key_identifier" : hex .EncodeToString ([]byte {7 , 7 }),
473+ "status" : "good" ,
474+ "pem" : string (pemBytes ),
475+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
476+ })
477+
478+ if resp .StatusCode != http .StatusBadRequest {
479+ t .Fatal ("Expected HTTP Bad Request" , resp .StatusCode , string (body ))
480+ }
481+ }
482+
483+ func TestInsertWrongExpiry (t * testing.T ) {
484+ dbAccessor , err := prepDB ()
485+ if err != nil {
486+ t .Fatal (err )
487+ }
488+
405489 serialNumber , _ , pemBytes , signer , err := makeCertificate ()
406490
407491 if err != nil {
408492 t .Fatal (err )
409493 }
410494
411495 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
412- "serial_number" : serialNumber .Text (16 ),
496+ "serial_number" : serialNumber .Text (10 ),
413497 "authority_key_identifier" : hex .EncodeToString ([]byte {7 , 7 }),
414498 "status" : "good" ,
415499 "pem" : string (pemBytes ),
500+ "expiry" : time .Now ().UTC ().Format (time .RFC3339 ),
416501 })
417502
418503 if resp .StatusCode != http .StatusBadRequest {
@@ -433,18 +518,19 @@ func TestInsertRevokedCertificate(t *testing.T) {
433518 }
434519
435520 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
436- "serial_number" : serialNumber .Text (16 ),
521+ "serial_number" : serialNumber .Text (10 ),
437522 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
438523 "status" : "revoked" ,
439524 "pem" : string (pemBytes ),
440525 "revoked_at" : time .Now (),
526+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
441527 })
442528
443529 if resp .StatusCode != http .StatusOK {
444530 t .Fatal ("Expected HTTP OK" , resp .StatusCode , string (body ))
445531 }
446532
447- ocsps , err := dbAccessor .GetOCSP (serialNumber .Text (16 ), hex .EncodeToString (cert .AuthorityKeyId ))
533+ ocsps , err := dbAccessor .GetOCSP (serialNumber .Text (10 ), hex .EncodeToString (cert .AuthorityKeyId ))
448534 if err != nil {
449535 t .Fatal (err )
450536 }
@@ -477,10 +563,11 @@ func TestInsertRevokedCertificateWithoutTime(t *testing.T) {
477563 }
478564
479565 resp , body := makeRequest (t , dbAccessor , signer , map [string ]interface {}{
480- "serial_number" : serialNumber .Text (16 ),
566+ "serial_number" : serialNumber .Text (10 ),
481567 "authority_key_identifier" : hex .EncodeToString (cert .AuthorityKeyId ),
482568 "status" : "revoked" ,
483569 "pem" : string (pemBytes ),
570+ "expiry" : cert .NotAfter .UTC ().Format (time .RFC3339 ),
484571 // Omit RevokedAt
485572 })
486573
0 commit comments