MCPcopy Create free account
hub / github.com/IceFireDB/IceFireDB / generateAndSignRSACerts

Function generateAndSignRSACerts

IceFireDB-SQLite/pkg/mysql/server/ssl.go:51–95  ·  view source on GitHub ↗

generate and sign RSA certificates with given CA see: https://fale.io/blog/2017/06/05/create-a-pki-in-golang/

(caPem, caKey []byte)

Source from the content-addressed store, hash-verified

49// generate and sign RSA certificates with given CA
50// see: https://fale.io/blog/2017/06/05/create-a-pki-in-golang/
51func generateAndSignRSACerts(caPem, caKey []byte) ([]byte, []byte) {
52 // Load CA
53 catls, err := tls.X509KeyPair(caPem, caKey)
54 if err != nil {
55 panic(err)
56 }
57 ca, err := x509.ParseCertificate(catls.Certificate[0])
58 if err != nil {
59 panic(err)
60 }
61
62 // use the CA to sign certificates
63 serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
64 serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
65 if err != nil {
66 panic(err)
67 }
68 cert := &x509.Certificate{
69 SerialNumber: serialNumber,
70 Subject: pkix.Name{
71 Organization: []string{"ORGANIZATION_NAME"},
72 Country: []string{"COUNTRY_CODE"},
73 Province: []string{"PROVINCE"},
74 Locality: []string{"CITY"},
75 StreetAddress: []string{"ADDRESS"},
76 PostalCode: []string{"POSTAL_CODE"},
77 },
78 NotBefore: time.Now(),
79 NotAfter: time.Now().AddDate(10, 0, 0),
80 SubjectKeyId: []byte{1, 2, 3, 4, 6},
81 ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth},
82 KeyUsage: x509.KeyUsageDigitalSignature,
83 }
84 priv, _ := rsa.GenerateKey(rand.Reader, 2048)
85
86 // sign the certificate
87 cert_b, err := x509.CreateCertificate(rand.Reader, ca, cert, &priv.PublicKey, catls.PrivateKey)
88 if err != nil {
89 panic(err)
90 }
91 certPem := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: cert_b})
92 keyPem := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
93
94 return certPem, keyPem
95}
96
97// generate CA in PEM
98// see: https://github.com/golang/go/blob/master/src/crypto/tls/generate_cert.go

Callers 1

NewDefaultServerFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected