Files
2021-08-22 16:47:09 +10:00

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
}