// NewPKCS11Signer returns a new PKCS #11 signer. func NewPKCS11Signer(cfg ocspConfig.Config) (ocsp.Signer, error) { log.Debugf("Loading PKCS #11 module %s", cfg.PKCS11.Module) certData, err := ioutil.ReadFile(cfg.CACertFile) if err != nil { return nil, errors.New(errors.CertificateError, errors.ReadFailed) } cert, err := helpers.ParseCertificatePEM(certData) if err != nil { return nil, err } PKCS11 := cfg.PKCS11 priv, err := pkcs11key.New(PKCS11.Module, PKCS11.Token, PKCS11.PIN, PKCS11.Label) if err != nil { return nil, errors.New(errors.PrivateKeyError, errors.ReadFailed) } return ocsp.NewSigner(cert, cert, priv, cfg.Interval) }
func makeInternalIssuers( issuers []Issuer, policy *cfsslConfig.Signing, lifespanOCSP time.Duration, ) (map[string]*internalIssuer, error) { if len(issuers) == 0 { return nil, errors.New("No issuers specified.") } internalIssuers := make(map[string]*internalIssuer) for _, iss := range issuers { if iss.Cert == nil || iss.Signer == nil { return nil, errors.New("Issuer with nil cert or signer specified.") } eeSigner, err := local.NewSigner(iss.Signer, iss.Cert, x509.SHA256WithRSA, policy) if err != nil { return nil, err } // Set up our OCSP signer. Note this calls for both the issuer cert and the // OCSP signing cert, which are the same in our case. ocspSigner, err := ocsp.NewSigner(iss.Cert, iss.Cert, iss.Signer, lifespanOCSP) if err != nil { return nil, err } cn := iss.Cert.Subject.CommonName if internalIssuers[cn] != nil { return nil, errors.New("Multiple issuer certs with the same CommonName are not supported") } internalIssuers[cn] = &internalIssuer{ cert: iss.Cert, eeSigner: eeSigner, ocspSigner: ocspSigner, } } return internalIssuers, nil }