For example say I want to sign a cert with an arbitrary or deprecated extension (nsCertType for example): https://www.openssl.org/docs/manmaster/man5/x509v3_config.html
I believe I'm supposed to add the arbitrary extension as part of the certificate as per below but how / where do you discover the asn1 object identifier? I've read more documentation that I care to admit today and am still stumped.
tmpl := &x509.Certificate{ SerialNumber: big.NewInt(time.Now().Unix()*1000), Subject: pkix.Name{CommonName: "edgeproxy", Organization: []string{"edgeproxy"}}, NotBefore: now, NotAfter: now.Add(caMaxAge), ExtraExtensions: []pkix.Extension{ { Id: asn1.ObjectIdentifier{}, //what goes here Critical: false, []byte("sslCA"), }, }, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth,x509.ExtKeyUsageClientAuth,x509.ExtKeyUsageEmailProtection, x509.ExtKeyUsageTimeStamping, x509.ExtKeyUsageMicrosoftCommercialCodeSigning, x509.ExtKeyUsageMicrosoftServerGatedCrypto, x509.ExtKeyUsageNetscapeServerGatedCrypto} , KeyUsage: x509.KeyUsageCRLSign | x509.KeyUsageCertSign, IsCA: true, BasicConstraintsValid: true, } In python I would do this but don't know how to port this into go (which is what I'm doing at the end of the day):
OpenSSL.crypto.X509Extension( b"nsCertType", False, b"sslCA" ),