generate CA in PEM see: https://github.com/golang/go/blob/master/src/crypto/tls/generate_cert.go
()
| 97 | // generate CA in PEM |
| 98 | // see: https://github.com/golang/go/blob/master/src/crypto/tls/generate_cert.go |
| 99 | func generateCA() ([]byte, []byte) { |
| 100 | serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) |
| 101 | serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) |
| 102 | if err != nil { |
| 103 | panic(err) |
| 104 | } |
| 105 | template := &x509.Certificate{ |
| 106 | SerialNumber: serialNumber, |
| 107 | Subject: pkix.Name{ |
| 108 | Organization: []string{"ORGANIZATION_NAME"}, |
| 109 | Country: []string{"COUNTRY_CODE"}, |
| 110 | Province: []string{"PROVINCE"}, |
| 111 | Locality: []string{"CITY"}, |
| 112 | StreetAddress: []string{"ADDRESS"}, |
| 113 | PostalCode: []string{"POSTAL_CODE"}, |
| 114 | }, |
| 115 | NotBefore: time.Now(), |
| 116 | NotAfter: time.Now().AddDate(10, 0, 0), |
| 117 | IsCA: true, |
| 118 | ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth}, |
| 119 | KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign | x509.KeyUsageKeyEncipherment, |
| 120 | BasicConstraintsValid: true, |
| 121 | } |
| 122 | |
| 123 | priv, _ := rsa.GenerateKey(rand.Reader, 2048) |
| 124 | derBytes, err := x509.CreateCertificate(rand.Reader, template, template, &priv.PublicKey, priv) |
| 125 | if err != nil { |
| 126 | panic(err) |
| 127 | } |
| 128 | |
| 129 | caPem := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) |
| 130 | caKey := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}) |
| 131 | |
| 132 | return caPem, caKey |
| 133 | } |