func (certSuite) TestNewDefaultServer(c *gc.C) { now := time.Now() expiry := roundTime(now.AddDate(1, 0, 0)) caCertPEM, caKeyPEM, err := cert.NewCA("foo", expiry) c.Assert(err, jc.ErrorIsNil) caCert, _, err := cert.ParseCertAndKey(caCertPEM, caKeyPEM) c.Assert(err, jc.ErrorIsNil) srvCertPEM, srvKeyPEM, err := cert.NewDefaultServer(caCertPEM, caKeyPEM, nil) c.Assert(err, jc.ErrorIsNil) srvCertExpiry := roundTime(time.Now().AddDate(10, 0, 0)) checkCertificate(c, caCert, srvCertPEM, srvKeyPEM, now, srvCertExpiry) }
// upgradeCertificateDNSNames ensure that the controller certificate // recorded in the agent config and also mongo server.pem contains the // DNSNames entries required by Juju. func upgradeCertificateDNSNames(config agent.ConfigSetter) error { si, ok := config.StateServingInfo() if !ok || si.CAPrivateKey == "" { // No certificate information exists yet, nothing to do. return nil } // Validate the current certificate and private key pair, and then // extract the current DNS names from the certificate. If the // certificate validation fails, or it does not contain the DNS // names we require, we will generate a new one. var dnsNames set.Strings serverCert, _, err := cert.ParseCertAndKey(si.Cert, si.PrivateKey) if err != nil { // The certificate is invalid, so create a new one. logger.Infof("parsing certificate/key failed, will generate a new one: %v", err) dnsNames = set.NewStrings() } else { dnsNames = set.NewStrings(serverCert.DNSNames...) } update := false requiredDNSNames := []string{"local", "juju-apiserver", "juju-mongodb"} for _, dnsName := range requiredDNSNames { if dnsNames.Contains(dnsName) { continue } dnsNames.Add(dnsName) update = true } if !update { return nil } // Write a new certificate to the mongo pem and agent config files. si.Cert, si.PrivateKey, err = cert.NewDefaultServer(config.CACert(), si.CAPrivateKey, dnsNames.Values()) if err != nil { return err } if err := mongo.UpdateSSLKey(config.DataDir(), si.Cert, si.PrivateKey); err != nil { return err } config.SetStateServingInfo(si) return nil }
// upgradeCertificateDNSNames ensure that the controller certificate // recorded in the agent config and also mongo server.pem contains the // DNSNames entires required by Juju/ func (a *MachineAgent) upgradeCertificateDNSNames() error { agentConfig := a.CurrentConfig() si, ok := agentConfig.StateServingInfo() if !ok || si.CAPrivateKey == "" { // No certificate information exists yet, nothing to do. return nil } // Parse the current certificate to get the current dns names. serverCert, err := cert.ParseCert(si.Cert) if err != nil { return err } update := false dnsNames := set.NewStrings(serverCert.DNSNames...) requiredDNSNames := []string{"local", "juju-apiserver", "juju-mongodb"} for _, dnsName := range requiredDNSNames { if dnsNames.Contains(dnsName) { continue } dnsNames.Add(dnsName) update = true } if !update { return nil } // Write a new certificate to the mongo pem and agent config files. si.Cert, si.PrivateKey, err = cert.NewDefaultServer(agentConfig.CACert(), si.CAPrivateKey, dnsNames.Values()) if err != nil { return err } if err := mongo.UpdateSSLKey(agentConfig.DataDir(), si.Cert, si.PrivateKey); err != nil { return err } return a.AgentConfigWriter.ChangeConfig(func(config agent.ConfigSetter) error { config.SetStateServingInfo(si) return nil }) }
// GenerateControllerCertAndKey makes sure that the config has a CACert and // CAPrivateKey, generates and returns new certificate and key. func GenerateControllerCertAndKey(caCert, caKey string, hostAddresses []string) (string, string, error) { return cert.NewDefaultServer(caCert, caKey, hostAddresses) }
c.Assert(store.testMode, gc.Equals, test.testMode) } } type specializedCharmRepo struct { *charmrepo.CharmStore testMode bool } func (s *specializedCharmRepo) WithTestMode() charmrepo.Interface { s.testMode = true return s } var serverKey2 = func() string { _, key, err := cert.NewDefaultServer(testing.CACert, testing.CAKey, nil) if err != nil { panic(err) } return string(key) }() var invalidCAKey = ` -----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJAZabKgKInuOxj5vDWLwHHQtK3/45KB+32D15w94Nt83BmuGxo90lw -----END RSA PRIVATE KEY----- `[1:] var invalidCACert = ` -----BEGIN CERTIFICATE----- MIIBOgIBAAJAZabKgKInuOxj5vDWLwHHQtK3/45KB+32D15w94Nt83BmuGxo90lw