Сертификаты в Go
Введение | |
Генерация pem | |
Похожие статьи |
Введение
Обычно сертификаты генерируются с помощью инструментов вроде OpenSSL.
У этого способа есть ограничения, связанные с возможностью инструментов. Обойти их можно
создав сертификат программно, например на Go.
Создать сертификат
Если нужно сгенерировать сертификат с определёнными значениям NotBefore и NotAfter
package main import ( "bytes" "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" "io/ioutil" "math/big" "time" ) func main() { template := x509.Certificate{ SerialNumber: big.NewInt(time.Now().Unix()), Subject: pkix.Name{Organization: []string{"localhost"}}, NotBefore: time.Now().AddDate(1, 0, 1), NotAfter: time.Now().AddDate(2, 1, 0), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, DNSNames: []string{"localhost"}, } privatekey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } crt, err := x509.CreateCertificate(rand.Reader, &template, &template, &privatekey.PublicKey, privatekey) if err != nil { panic(err) } var certOut, keyOut bytes.Buffer pem.Encode(&certOut, &pem.Block{Type: "CERTIFICATE", Bytes: crt}) pem.Encode(&keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privatekey)}) ioutil.WriteFile("/tmp/key", keyOut.Bytes(), 0644) ioutil.WriteFile("/tmp/pem", certOut.Bytes(), 0644) }
Программирование на Go | |
Объявление переменных | |
Определить тип переменной | |
Указатели | |
Константы | |
Сертификаты | |
Запросы к REST API на Go | |
Установка в Linux |