Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "bytes"
  6. "context"
  7. "crypto/rand"
  8. "crypto/rsa"
  9. "crypto/x509"
  10. "crypto/x509/pkix"
  11. "encoding/pem"
  12. "log"
  13. "math/big"
  14. "os"
  15. "time"
  16.  
  17. v0 "github.com/signalsciences/sigsci/cloudwaf/proto/provisioning/v0"
  18. "github.com/signalsciences/sigsci/lib/service/cloudwafprovisioning"
  19. "github.com/signalsciences/sigsci/lib/slog"
  20. )
  21.  
  22. func main() {
  23. logger := slog.NewRootLogger("cloudwaf_provisioning", "main", os.Stderr)
  24. cwpsSRVName := "127.0.0.1:50053"
  25.  
  26. conn, err := cloudwafprovisioning.InsecureInitialize(cwpsSRVName)
  27. if err != nil {
  28. log.Printf("CWPS.Initialize error=%v", err)
  29. }
  30. if err != nil {
  31. logger.Error(err).Log("Could not initialize app")
  32. os.Exit(1)
  33. }
  34. defer conn.Close()
  35.  
  36. client, err := cloudwafprovisioning.ProvideClient(conn, "us-west-2")
  37. if err != nil {
  38. logger.Error(err).Log("Could not provide client")
  39. os.Exit(1)
  40. }
  41. uploadCert(client, logger)
  42. listCerts(client, logger)
  43. //deleteCert(client, logger)
  44. //listCerts(client, logger)
  45.  
  46. }
  47.  
  48. func genTestPEMs(cert *x509.Certificate) []byte {
  49. return pem.EncodeToMemory(&pem.Block{
  50. Type: "CERTIFICATE",
  51. Bytes: cert.Raw,
  52. })
  53. }
  54.  
  55. func genTestCertWithPrivKey(host string) *x509.Certificate {
  56. return genTestCert(host, genTestPrivKey())
  57. }
  58.  
  59. func genTestPrivKey() *rsa.PrivateKey {
  60. key, err := rsa.GenerateKey(rand.Reader, 2048)
  61. if err != nil {
  62. panic(err)
  63. }
  64. return key
  65. }
  66.  
  67. func genTestCert(host string, key *rsa.PrivateKey) *x509.Certificate {
  68. template := &x509.Certificate{
  69. Subject: pkix.Name{
  70. Organization: []string{"Acme Co"},
  71. },
  72. NotBefore: time.Now(),
  73. NotAfter: time.Now().Add(1 * time.Minute),
  74. SerialNumber: big.NewInt(46546),
  75. KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
  76. ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
  77. BasicConstraintsValid: true,
  78. IsCA: true,
  79. DNSNames: []string{host},
  80. }
  81.  
  82. cert, err := x509.CreateCertificate(
  83. rand.Reader,
  84. template,
  85. template,
  86. &key.PublicKey,
  87. key,
  88. )
  89. if err != nil {
  90. panic(err)
  91. }
  92.  
  93. c, err := x509.ParseCertificate(cert)
  94. if err != nil {
  95. panic(err)
  96. }
  97.  
  98. return c
  99. }
  100.  
  101. func deleteCert(client v0.ProvisioningClient, logger slog.Slogger) {
  102. // try deleting certs
  103. resp, err := client.DeleteCert(context.Background(), &v0.DeleteCertRequest{
  104. SiteDetails: &v0.Site{
  105. SiteId: "5d65b268241972c9e2058a0f",
  106. CorpId: "000000000000000000000002",
  107. },
  108. FingerPrint: "SOME FINGERPRINT HERE",
  109. })
  110. if err != nil {
  111. logger.Logf("ERR=%#v", err)
  112. }
  113. logger.Logf("DELETE RESP: %#v", resp)
  114. }
  115.  
  116. func uploadCert(client v0.ProvisioningClient, logger slog.Slogger) {
  117. // try uploading certs
  118. intermediateCertPEM := genTestPEMs(genTestCertWithPrivKey("foo.com"))
  119. privateKey := genTestPrivKey()
  120. certPem := genTestPEMs(genTestCert("foo.com", privateKey))
  121. var b bytes.Buffer
  122. test := bufio.NewWriter(&b)
  123. block := &pem.Block{
  124. Type: "PRIVATE KEY",
  125. Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
  126. }
  127. err := pem.Encode(test, block)
  128. if err != nil {
  129. logger.Logf("ERR=%#v", err)
  130. }
  131.  
  132. resp1, err := client.UploadCert(context.Background(), &v0.UploadCertRequest{
  133. SiteDetails: &v0.Site{
  134. SiteId: "5d65b268241972c9e2058a0f",
  135. CorpId: "000000000000000000000002",
  136. CorpName: "foo.com",
  137. },
  138. Cert: &v0.UnsafeInternalOnlyCert{
  139. Hostname: "foo.com",
  140. CertPem: certPem,
  141. IntermediateCertsPem: intermediateCertPEM,
  142. PrivateKeyPem: b.Bytes(),
  143. },
  144. })
  145. if err != nil {
  146. logger.Logf("ERR=%v", err)
  147. }
  148. logger.Logf("RESP 1: %v", resp1)
  149. }
  150.  
  151. func listCerts(client v0.ProvisioningClient, logger slog.Slogger) {
  152. // try listing certs
  153. resp2, err := client.ListCerts(context.Background(), &v0.ListCertsRequest{
  154. SiteDetails: &v0.Site{
  155. SiteId: "5d65b268241972c9e2058a0f",
  156. CorpId: "000000000000000000000002",
  157. },
  158. // Hostname: "bar.com",
  159. })
  160. if err != nil {
  161. logger.Logf("ERR=%#v", err)
  162. }
  163. logger.Logf("LIST RESP: %v", resp2)
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement