1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package cert
- import (
- "crypto/x509"
- "crypto/x509/pkix"
- "encoding/pem"
- "testing"
- )
- func TestCreateCert(t *testing.T) {
- dnsName := "ehang.io"
- g := NewX509Generator(pkix.Name{
- Country: []string{"CN"},
- Organization: []string{"ehang.io"},
- OrganizationalUnit: []string{"nps"},
- Province: []string{"Beijing"},
- CommonName: "nps",
- Locality: []string{"Beijing"},
- })
- // generate root ca
- rootCa, rootKey, err := g.CreateRootCa()
- if err != nil {
- t.Fatal(err)
- }
- err = g.InitRootCa(rootCa, rootKey)
- if err != nil {
- t.Fatal(err)
- }
- // generate npc cert
- clientCa, _, err := g.CreateCert(dnsName)
- if err != nil {
- t.Fatal(err)
- }
- // verify npc cert by root cert
- roots := x509.NewCertPool()
- ok := roots.AppendCertsFromPEM(rootCa)
- if !ok {
- panic("failed to parse root certificate")
- }
- block, _ := pem.Decode(clientCa)
- if block == nil {
- t.Fatal("failed to parse certificate PEM")
- }
- cert, err := x509.ParseCertificate(block.Bytes)
- if err != nil {
- t.Fatal("failed to parse certificate: " + err.Error())
- }
- opts := x509.VerifyOptions{
- Roots: roots,
- DNSName: dnsName,
- Intermediates: x509.NewCertPool(),
- }
- if _, err := cert.Verify(opts); err != nil {
- t.Fatal("failed to verify certificate: " + err.Error())
- }
- }
|