slackhq/nebula · error
refusing to overwrite existing CA key: %s
Error message
refusing to overwrite existing CA key: %s
What it means
Safety guard in `nebula-cert ca`: before writing the new CA private key, os.Stat checks -out-key-path and if the file already exists (and the target is not stdio and PKCS#11 is not in use) the command aborts instead of clobbering an existing CA key. Destroying an old CA key would orphan every cert it signed, so overwrite is refused.
Source
Thrown at cmd/nebula-cert/ca.go:315
}
}
t := &cert.TBSCertificate{
Version: version,
Name: *cf.name,
Groups: groups,
Networks: networks,
UnsafeNetworks: unsafeNetworks,
NotBefore: time.Now(),
NotAfter: time.Now().Add(*cf.duration),
PublicKey: pub,
IsCA: true,
Curve: curve,
}
if !isP11 && !isStdio(*cf.outKeyPath) {
if _, err := os.Stat(*cf.outKeyPath); err == nil {
return fmt.Errorf("refusing to overwrite existing CA key: %s", *cf.outKeyPath)
}
}
if !isStdio(*cf.outCertPath) {
if _, err := os.Stat(*cf.outCertPath); err == nil {
return fmt.Errorf("refusing to overwrite existing CA cert: %s", *cf.outCertPath)
}
}
var c cert.Certificate
var b []byte
if isP11 {
c, err = t.SignWith(nil, curve, p11Client.SignASN1)
if err != nil {
return fmt.Errorf("error while signing with PKCS#11: %w", err)
}
} else {View on GitHub (pinned to dd8f660c0a)
Solutions
- Move or delete the existing key file only if you truly intend to retire the CA
- Choose a new -out-key-path for the new CA
- Write to stdout (-out-key-path with '-' / stdio) if you redirect yourself
- If the file is a stale partial from a failed run, remove it after confirming it is not a live CA key
Example fix
// before nebula-cert ca -name "my ca" # fails: ca.key exists // after mv ca.key ca.key.old && nebula-cert ca -name "my ca"
Defensive patterns
Strategy: validation
Validate before calling
if _, err := os.Stat(outKeyPath); err == nil {
return fmt.Errorf("key %s exists; move it or choose another path", outKeyPath)
} Prevention
- Check -out-key-path existence before invoking ca
- Use unique output directories per CA generation in automation
- Keep stdio ('-') output in scripts and manage files yourself
- Treat existing ca.key as precious — archive, never overwrite
When it happens
Trigger: nebula-cert ca with -out-key-path pointing to an existing file; e.g. re-running the same ca command twice, or a previous failed run left a partial key file on disk.
Common situations: Idempotent re-runs in CI/automation; leftover key from an earlier aborted run; wrong working directory causing an existing key path to be hit; confusion with -out-key-path defaulting to ca.key in cwd.
Related errors
- refusing to overwrite existing CA cert: %s
- error while writing out-key: %s
- error while writing out-crt: %s
- error while writing out-qr: %s
- error while writing out-key: %s
AI-assisted analysis of slackhq/nebula@dd8f660c0a (2026-09-03).
Data as JSON: /api/errors/e5a77df48cd645a3.
Report an issue: GitHub.