ocsprefresh_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package ocsprefresh
  2. import (
  3. "encoding/hex"
  4. "testing"
  5. "time"
  6. "github.com/cloudflare/cfssl/certdb"
  7. "github.com/cloudflare/cfssl/certdb/sql"
  8. "github.com/cloudflare/cfssl/certdb/testdb"
  9. "github.com/cloudflare/cfssl/cli"
  10. "github.com/cloudflare/cfssl/helpers"
  11. "golang.org/x/crypto/ocsp"
  12. "io/ioutil"
  13. )
  14. var dbAccessor certdb.Accessor
  15. func TestOCSPRefreshMain(t *testing.T) {
  16. db := testdb.SQLiteDB("../../certdb/testdb/certstore_development.db")
  17. certPEM, err := ioutil.ReadFile("../../ocsp/testdata/cert.pem")
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. cert, err := helpers.ParseCertificatePEM(certPEM)
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. expirationTime := time.Now().AddDate(1, 0, 0)
  26. certRecord := certdb.CertificateRecord{
  27. Serial: cert.SerialNumber.String(),
  28. AKI: hex.EncodeToString(cert.AuthorityKeyId),
  29. Expiry: expirationTime,
  30. PEM: string(certPEM),
  31. Status: "good",
  32. }
  33. dbAccessor = sql.NewAccessor(db)
  34. err = dbAccessor.InsertCertificate(certRecord)
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. err = ocsprefreshMain([]string{}, cli.Config{
  39. CAFile: "../../ocsp/testdata/ca.pem",
  40. ResponderFile: "../../ocsp/testdata/server.crt",
  41. ResponderKeyFile: "../../ocsp/testdata/server.key",
  42. DBConfigFile: "../testdata/db-config.json",
  43. Interval: helpers.OneDay,
  44. })
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. records, err := dbAccessor.GetUnexpiredOCSPs()
  49. if err != nil {
  50. t.Fatal("Failed to get OCSP responses")
  51. }
  52. if len(records) != 1 {
  53. t.Fatal("Expected one OCSP response")
  54. }
  55. var resp *ocsp.Response
  56. resp, err = ocsp.ParseResponse([]byte(records[0].Body), nil)
  57. if err != nil {
  58. t.Fatal("Failed to parse OCSP response")
  59. }
  60. if resp.Status != ocsp.Good {
  61. t.Fatal("Expected cert status 'good'")
  62. }
  63. err = dbAccessor.RevokeCertificate(certRecord.Serial, certRecord.AKI, ocsp.KeyCompromise)
  64. if err != nil {
  65. t.Fatal("Failed to revoke certificate")
  66. }
  67. err = ocsprefreshMain([]string{}, cli.Config{
  68. CAFile: "../../ocsp/testdata/ca.pem",
  69. ResponderFile: "../../ocsp/testdata/server.crt",
  70. ResponderKeyFile: "../../ocsp/testdata/server.key",
  71. DBConfigFile: "../testdata/db-config.json",
  72. Interval: helpers.OneDay,
  73. })
  74. if err != nil {
  75. t.Fatal(err)
  76. }
  77. records, err = dbAccessor.GetUnexpiredOCSPs()
  78. if err != nil {
  79. t.Fatal("Failed to get OCSP responses")
  80. }
  81. if len(records) != 1 {
  82. t.Fatal("Expected one OCSP response")
  83. }
  84. resp, err = ocsp.ParseResponse([]byte(records[0].Body), nil)
  85. if err != nil {
  86. t.Fatal("Failed to parse OCSP response")
  87. }
  88. if resp.Status != ocsp.Revoked {
  89. t.Fatal("Expected cert status 'revoked'")
  90. }
  91. }