mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 10:07:15 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ssl
 | |
| 
 | |
| import (
 | |
| 	"crypto/rand"
 | |
| 	"crypto/x509"
 | |
| 	"crypto/x509/pkix"
 | |
| 	"math/big"
 | |
| 	"net"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| func GetRoot() (*x509.Certificate, error) {
 | |
| 	serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
 | |
| 	serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	return &x509.Certificate{
 | |
| 		SerialNumber: serialNumber,
 | |
| 		Subject: pkix.Name{
 | |
| 			Organization: []string{"Filestash"},
 | |
| 		},
 | |
| 		NotBefore:             time.Now().Add(- 24 * time.Hour),
 | |
| 		NotAfter:              time.Now().Add(24 * 365 * 100 * time.Hour),
 | |
| 		KeyUsage:              x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
 | |
| 		ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
 | |
| 		BasicConstraintsValid: true,
 | |
| 		IsCA:                  false,
 | |
| 		IPAddresses:           func() []net.IP {
 | |
| 			ips := []net.IP{}
 | |
| 			ifaces, err := net.Interfaces()
 | |
| 			if err != nil {
 | |
| 				return []net.IP{ net.ParseIP("127.0.0.1") }
 | |
| 			}
 | |
| 			for _, i := range ifaces {
 | |
| 				addrs, err := i.Addrs()
 | |
| 				if err != nil {
 | |
| 					return []net.IP{ net.ParseIP("127.0.0.1") }
 | |
| 				}
 | |
| 				for _, addr := range addrs {
 | |
| 					var ip net.IP
 | |
| 					switch v := addr.(type) {
 | |
| 					case *net.IPNet:
 | |
| 						ip = v.IP
 | |
| 					case *net.IPAddr:
 | |
| 						ip = v.IP
 | |
| 					}
 | |
| 					ips = append(ips, ip)
 | |
| 				}
 | |
| 			}
 | |
| 			return ips
 | |
| 		}(),
 | |
| 	}, nil
 | |
| }
 | 
