selfsign_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package selfsign
  2. import (
  3. "crypto/x509"
  4. "encoding/pem"
  5. "io/ioutil"
  6. "net"
  7. "net/url"
  8. "reflect"
  9. "testing"
  10. "time"
  11. "github.com/cloudflare/cfssl/config"
  12. "github.com/cloudflare/cfssl/helpers"
  13. )
  14. const (
  15. keyFile = "testdata/localhost.key"
  16. csrFile = "testdata/localhost.csr"
  17. csr2File = "testdata/sans.csr"
  18. )
  19. func TestDefaultSign(t *testing.T) {
  20. csrBytes, err := ioutil.ReadFile(csrFile)
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. keyBytes, err := ioutil.ReadFile(keyFile)
  25. if err != nil {
  26. t.Fatal(err)
  27. }
  28. priv, err := helpers.ParsePrivateKeyPEM(keyBytes)
  29. if err != nil {
  30. t.Fatal(err)
  31. }
  32. profile := config.DefaultConfig()
  33. profile.Expiry = 10 * time.Hour
  34. _, err = Sign(priv, csrBytes, profile)
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. }
  39. func TestSANs(t *testing.T) {
  40. csrBytes, err := ioutil.ReadFile(csr2File)
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. keyBytes, err := ioutil.ReadFile(keyFile)
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. priv, err := helpers.ParsePrivateKeyPEM(keyBytes)
  49. if err != nil {
  50. t.Fatal(err)
  51. }
  52. profile := config.DefaultConfig()
  53. profile.Expiry = 10 * time.Hour
  54. certPEM, err := Sign(priv, csrBytes, profile)
  55. if err != nil {
  56. t.Fatal(err)
  57. }
  58. p, _ := pem.Decode(certPEM)
  59. if p == nil || p.Type != "CERTIFICATE" {
  60. // this seems unlikely
  61. t.Fatalf("failed creating certificate")
  62. }
  63. cert, err := x509.ParseCertificate(p.Bytes)
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. expectedEmailAddresses := []string{"jdoe@example.com"}
  68. if !reflect.DeepEqual(cert.EmailAddresses, expectedEmailAddresses) {
  69. t.Errorf("cert should have contained EmailAddresses %#v but had %#v", expectedEmailAddresses, cert.EmailAddresses)
  70. }
  71. expectedDNSNames := []string{"cloudflare.com", "www.cloudflare.com"}
  72. if !reflect.DeepEqual(cert.DNSNames, expectedDNSNames) {
  73. t.Errorf("cert should have contained DNSNames %#v but had %#v", expectedDNSNames, cert.DNSNames)
  74. }
  75. expectedIPAddresses := []net.IP{net.IP{0xc0, 0xa8, 0x0, 0x1}}
  76. if !reflect.DeepEqual(cert.IPAddresses, expectedIPAddresses) {
  77. t.Errorf("cert should have contained IPAddresses %#v but had %#v", expectedIPAddresses, cert.IPAddresses)
  78. }
  79. expectedURIs := []*url.URL{&url.URL{Scheme: "https", Host: "www.cloudflare.com"}}
  80. if !reflect.DeepEqual(cert.URIs, expectedURIs) {
  81. t.Errorf("cert should have contained URIs %#v but had %#v", expectedURIs, cert.URIs)
  82. }
  83. }