in kafka/common.go [447:489]
func (kp *keyPair) reloadIfChanged() error {
kp.mu.Lock()
defer kp.mu.Unlock()
if kp.certPath != "" && kp.keyPath != "" {
certInfo, err := os.Stat(kp.certPath)
if err != nil {
return fmt.Errorf("unable to stat certificate file: %w", err)
}
if kp.certModTS.Before(certInfo.ModTime()) {
if certInfo.Size() < 1 {
return nil
}
cert, err := tls.LoadX509KeyPair(kp.certPath, kp.keyPath)
if err != nil {
return fmt.Errorf("failed to load new certificate: %w", err)
}
kp.config.Certificates = []tls.Certificate{cert}
kp.certModTS = certInfo.ModTime()
}
}
caInfo, err := os.Stat(kp.caPath)
if err != nil {
return fmt.Errorf("unable to stat CA certificate file: %w", err)
}
if kp.caModTS.Before(caInfo.ModTime()) {
caCert, err := os.ReadFile(kp.caPath)
if err != nil {
return fmt.Errorf("failed to read CA certificate: %w", err)
}
if len(caCert) == 0 {
return nil
}
kp.config.RootCAs = x509.NewCertPool()
if !kp.config.RootCAs.AppendCertsFromPEM(caCert) {
return fmt.Errorf("failed to append CA cert: %w", err)
}
kp.caModTS = caInfo.ModTime()
}
return nil
}