mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-11-04 13:35:46 +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
 | 
						|
}
 |