mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| package tls
 | |
| 
 | |
| import (
 | |
| 	"crypto/rand"
 | |
| 	"crypto/rsa"
 | |
| 	"crypto/x509"
 | |
| 	"crypto/x509/pkix"
 | |
| 	"encoding/pem"
 | |
| 	"math/big"
 | |
| 	"os"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| func CreateRandomRootCertBytes() ([]byte, error) {
 | |
| 	cert := x509.Certificate{
 | |
| 		SerialNumber: big.NewInt(42),
 | |
| 		Subject: pkix.Name{
 | |
| 			CommonName: "test1",
 | |
| 		},
 | |
| 		NotBefore:             time.Now(),
 | |
| 		NotAfter:              time.Now().AddDate(10, 0, 0),
 | |
| 		IsCA:                  true,
 | |
| 		ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
 | |
| 		KeyUsage:              x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
 | |
| 		BasicConstraintsValid: true,
 | |
| 	}
 | |
| 
 | |
| 	key, err := rsa.GenerateKey(rand.Reader, 2048)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	bytes, err := x509.CreateCertificate(rand.Reader, &cert, &cert, &key.PublicKey, key)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return pem.EncodeToMemory(&pem.Block{
 | |
| 		Type:  "CERTIFICATE",
 | |
| 		Bytes: bytes,
 | |
| 	}), nil
 | |
| }
 | |
| 
 | |
| func CreateRandomClientCert() ([]byte, []byte, error) {
 | |
| 	caKey, err := rsa.GenerateKey(rand.Reader, 2048)
 | |
| 	if err != nil {
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	key, err := rsa.GenerateKey(rand.Reader, 2048)
 | |
| 	if err != nil {
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	keyBytes := pem.EncodeToMemory(&pem.Block{
 | |
| 		Type:  "RSA PRIVATE KEY",
 | |
| 		Bytes: x509.MarshalPKCS1PrivateKey(key),
 | |
| 	})
 | |
| 
 | |
| 	caCert := x509.Certificate{
 | |
| 		SerialNumber: big.NewInt(42),
 | |
| 		Subject: pkix.Name{
 | |
| 			CommonName: "test1",
 | |
| 		},
 | |
| 		NotBefore:             time.Now(),
 | |
| 		NotAfter:              time.Now().AddDate(10, 0, 0),
 | |
| 		IsCA:                  true,
 | |
| 		ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth},
 | |
| 		KeyUsage:              x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
 | |
| 		BasicConstraintsValid: true,
 | |
| 	}
 | |
| 
 | |
| 	cert := x509.Certificate{
 | |
| 		SerialNumber: big.NewInt(2019),
 | |
| 		Subject: pkix.Name{
 | |
| 			CommonName: "test1",
 | |
| 		},
 | |
| 		NotBefore:   time.Now(),
 | |
| 		NotAfter:    time.Now().AddDate(10, 0, 0),
 | |
| 		ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth},
 | |
| 		KeyUsage:    x509.KeyUsageDigitalSignature,
 | |
| 	}
 | |
| 
 | |
| 	certData, err := x509.CreateCertificate(rand.Reader, &cert, &caCert, &key.PublicKey, caKey)
 | |
| 	if err != nil {
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	certBytes := pem.EncodeToMemory(&pem.Block{
 | |
| 		Type:  "CERTIFICATE",
 | |
| 		Bytes: certData,
 | |
| 	})
 | |
| 
 | |
| 	return keyBytes, certBytes, nil
 | |
| }
 | |
| 
 | |
| func newMockReadFile(data map[string]([]byte)) ReadFileFunc {
 | |
| 	return func(path string) ([]byte, error) {
 | |
| 		bytes, ok := data[path]
 | |
| 		if !ok {
 | |
| 			return nil, os.ErrNotExist
 | |
| 		}
 | |
| 		return bytes, nil
 | |
| 	}
 | |
| }
 |