testCTX, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
- // From here prepare two certificate chains where one is expired
+ // From here prepare two certificate chains where one expires before the
+ // other
rootPrivatekey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(fmt.Sprintf("Error creating rsa key: %s", err))
}
- rootCertExpiry := time.Now().AddDate(0, 0, 2)
+ rootCertExpiry := time.Now().AddDate(0, 0, 3)
rootCertTmpl := generateCertificateTemplate(rootCertExpiry, false)
rootCertTmpl.IsCA = true
_, rootCertPem := generateSelfSignedCertificateWithPrivateKey(rootCertTmpl, rootPrivatekey)
- oldRootCertExpiry := time.Now().AddDate(0, 0, -1)
- expiredRootCertTmpl := generateCertificateTemplate(oldRootCertExpiry, false)
- expiredRootCertTmpl.IsCA = true
- expiredRootCert, expiredRootCertPem := generateSelfSignedCertificateWithPrivateKey(expiredRootCertTmpl, rootPrivatekey)
+ olderRootCertExpiry := time.Now().AddDate(0, 0, 1)
+ olderRootCertTmpl := generateCertificateTemplate(olderRootCertExpiry, false)
+ olderRootCertTmpl.IsCA = true
+ olderRootCert, olderRootCertPem := generateSelfSignedCertificateWithPrivateKey(olderRootCertTmpl, rootPrivatekey)
- serverCertExpiry := time.Now().AddDate(0, 0, 1)
+ serverCertExpiry := time.Now().AddDate(0, 0, 2)
serverCertTmpl := generateCertificateTemplate(serverCertExpiry, false)
- _, serverCertPem, serverKey := generateSignedCertificate(serverCertTmpl, expiredRootCert, rootPrivatekey)
+ _, serverCertPem, serverKey := generateSignedCertificate(serverCertTmpl, olderRootCert, rootPrivatekey)
// CAFile must be passed via filesystem, use a tempfile.
tmpCaFile, err := ioutil.TempFile("", "cafile.pem")
if err != nil {
t.Fatalf(fmt.Sprintf("Error creating CA tempfile: %s", err))
}
- if _, err := tmpCaFile.Write(bytes.Join([][]byte{rootCertPem, expiredRootCertPem}, []byte("\n"))); err != nil {
+ if _, err := tmpCaFile.Write(bytes.Join([][]byte{rootCertPem, olderRootCertPem}, []byte("\n"))); err != nil {
t.Fatalf(fmt.Sprintf("Error writing CA tempfile: %s", err))
}
if err := tmpCaFile.Close(); err != nil {
serverKeyPem := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(serverKey)})
- keypair, err := tls.X509KeyPair(serverCertPem, serverKeyPem)
+ // Include the older root cert in the chain
+ keypair, err := tls.X509KeyPair(append(serverCertPem, olderRootCertPem...), serverKeyPem)
if err != nil {
panic(fmt.Sprintf("Failed to decode TLS testing keypair: %s\n", err))
}
// Check values
expectedResults := map[string]float64{
- "probe_ssl_earliest_cert_expiry": float64(serverCertExpiry.Unix()),
+ "probe_ssl_earliest_cert_expiry": float64(olderRootCertExpiry.Unix()),
"probe_ssl_last_chain_expiry_timestamp_seconds": float64(serverCertExpiry.Unix()),
"probe_ssl_last_chain_info": 1,
"probe_tls_version_info": 1,