Golang crypto/x509.CertPool.AddCert() and Subjects functions example
package crypto/x509
AddCert adds a certificate to a pool.
Golang crypto/x509.CertPool.AddCert() function usage example
package main
import (
"time"
"math/big"
"crypto/x509"
"crypto/x509/pkix"
"fmt"
"crypto/rsa"
"crypto/rand"
)
func main() {
// ok, lets populate the certificate with some data
// not all fields in Certificate will be populated
// see Certificate structure at
// http://golang.org/pkg/crypto/x509/#Certificate
template := &x509.Certificate {
IsCA : true,
BasicConstraintsValid : true,
SubjectKeyId : []byte{1,2,3},
SerialNumber : big.NewInt(1234),
Subject : pkix.Name{
Country : []string{"Earth"},
Organization: []string{"Mother Nature"},
},
NotBefore : time.Now(),
NotAfter : time.Now().AddDate(5,5,5),
// see http://golang.org/pkg/crypto/x509/#KeyUsage
ExtKeyUsage : []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth},
KeyUsage : x509.KeyUsageDigitalSignature|x509.KeyUsageCertSign,
}
// generate private key
privatekey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
fmt.Println(err)
}
publickey := &privatekey.PublicKey
// create a self-signed certificate. template = parent
var parent = template
cert, err := x509.CreateCertificate(rand.Reader, template, parent, publickey,privatekey)
if err != nil {
fmt.Println(err)
}
roots := x509.NewCertPool()
certs, err := x509.ParseCertificates(cert)
if err != nil {
fmt.Println(err)
}
fmt.Println("BEFORE AddCert")
fmt.Println(roots)
for i := range certs {
roots.AddCert(certs[i])
}
fmt.Println("AFTER AddCert")
fmt.Println(roots)
if len(roots.Subjects()) != 1 {
fmt.Println("Expecting a cert! ")
}
fmt.Printf("Pool Subjects : %x\n", roots.Subjects())
}
Output :
BEFORE AddCert
&{map[] map[] []}
AFTER AddCert
&{map[:[0]] map[0(10 UEarth10U Mother Nature:[0]] [0xc208017b00]}
Pool Subjects : [3028310e300c06035504061305456172746831163014060355040a130d4d6f74686572204e6174757265]
Reference :
Advertisement
Something interesting
Tutorials
+8.8k Golang : On lambda, anonymous, inline functions and function literals
+8.2k Golang : Get final or effective URL with Request.URL example
+8.2k Golang : Add build version and other information in executables
+25.9k Golang : How to read integer value from standard input ?
+36k Golang : Get file last modified date and time
+7.4k Golang : Scanf function weird error in Windows
+17.3k Golang : How to tell if a file is compressed either gzip or zip ?
+21.8k Golang : How to reverse slice or array elements order
+14.8k Golang : Find commonalities in two slices or arrays example
+5.6k Golang : Detect words using using consecutive letters in a given string
+8.8k Yum Error: no such table: packages
+9.6k Golang : Quadratic example