Privacy Tools Guide

Documenting DNS and SSL certificate renewal procedures is essential for maintaining continuous website availability and security. Without proper documentation, certificate expirations can cause service outages, and poorly documented DNS changes can lead to prolonged downtime during incidents. This guide walks you through creating documentation that your team can follow reliably.

Why Documentation Matters for Renewals

SSL certificate expirations resulting from poor documentation cost businesses millions annually in downtime and emergency remediation. When certificates expire, browsers display security warnings that drive visitors away, and some applications refuse connections entirely. DNS documentation gaps mean that during emergencies, teams waste critical time tracing which records control which services rather than fixing the problem.

Beyond preventing outages, thorough documentation enables team continuity. When someone leaves or during incident response with unfamiliar team members, well-documented procedures mean anyone can execute renewals correctly. Documentation also supports compliance audits by demonstrating that certificate management follows defined processes.

Essential DNS Documentation Components

Your DNS documentation should cover the complete infrastructure picture with enough detail for any team member to understand and make changes confidently.

Zone File Information

Document every DNS zone you manage with authoritative nameservers, registration details, and renewal contacts:

Zone Registrar Nameservers Expiry Date Renewal Contact Auto-Renew
example.com Cloudflare ns1.cloudflare.com, ns2.cloudflare.com 2027-03-15 ops@company.com Yes
api.example.com AWS Route 53 ns-123.awsdns-45.com 2026-09-20 devops@company.com No

Include the authentication method for each registrar—some use email verification, others require API keys or two-factor authentication. Document where login credentials are stored, whether in a password manager, secrets management system, or other secure location.

Record Inventory

Maintain a complete inventory of all DNS records with their purpose and any dependencies:

; A Records
@          IN A      203.0.113.10        ; Main website - CDN behind
api        IN A      203.0.113.20        ; API server - no CDN
blog       IN A      203.0.113.30        ; Blog - points to CMS

; CNAME Records
www        IN CNAME  @                    ; WWW redirect to apex
cdn        IN CNAME  d1234567890.cloudfront.net
mail       IN CNAME  mailgun.org         ; Email service
smtp       IN CNAME  smtp.mailgun.org    ; Outgoing mail

; TXT Records
@          IN TXT    "v=spf1 include:mailgun.org ~all"
_dmarc     IN TXT    "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
google-site-verification IN TXT "google-code-here"

; MX Records
@          IN MX     10 mailgun.org

For each record, note when it was created, why it exists, and who requested it. This context helps during cleanup efforts when determining whether obsolete records can be safely removed.

Nameserver Configuration Details

Document the complete nameserver hierarchy:

; Primary Nameservers (Authoritative)
ns1.primary-dns-provider.com    (IP: 203.0.113.100)
ns2.primary-dns-provider.com    (IP: 203.0.113.101)

; Secondary/Backup Nameservers
ns1.backup-provider.com          (IP: 198.51.100.50)
ns2.backup-provider.com          (IP: 198.51.100.51)

; Transfer Zone Settings
allow-transfer { 203.0.113.100; 203.0.113.101; 198.51.100.50; 198.51.100.51; }

Include DNSSEC key information if implemented:

; DNSSEC Keys
example.com. IN DS 12345 8 2 ABCDEF1234567890...

SSL Certificate Documentation

SSL certificate documentation must track every certificate, its scope, renewal schedule, and the complete chain.

Certificate Inventory

Maintain a spreadsheet or database with these fields:

Domain CA Type Expiry Auto-Renew Method Contact Notes
example.com Let’s Encrypt Wildcard 2026-06-15 Yes certbot ops@ Primary domain
api.example.com DigiCert Single 2026-12-01 No Manual devops@ EV certificate
staging.example.com Let’s Encrypt Single 2026-04-20 Yes certbot qa@ Staging environment

Certificate Chain Documentation

Document the complete certificate chain for each domain:

example.com
├── Root CA: DigiCert Global Root G2
├── Intermediate CA: DigiCert TLS RSA SHA256 2020 CA1
└── Server Certificate: *.example.com (Valid through 2026-12-01)

Include the location of private keys and their access controls:

Private Key Locations:
- /etc/ssl/private/example.com.key (mode: 600, owner: www-data)
- Stored in HashiCorp Vault: secret/certs/example.com
- Backup location: AWS S3 bucket (encrypted)

Renewal Procedures for Each Certificate Type

Let’s Encrypt (Automated)

For Let’s Encrypt certificates using certbot, document the renewal command and any hooks:

# Test renewal (dry run)
sudo certbot renew --dry-run

# Manual renewal if needed
sudo certbot renew

# Force renewal for specific certificate
sudo certbot certonly --force-renewal -d example.com

# Post-renewal hook (reload nginx)
echo '/usr/sbin/service nginx reload' > /etc/letsencrypt/renewal-hooks/post/reload-nginx.sh
chmod +x /etc/letsencrypt/renewal-hooks/post/reload-nginx.sh

Include any special configuration for your web server:

# Nginx SSL configuration after renewal
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

Commercial Certificates (Manual)

For commercial certificates from DigiCert, Comodo, or others, document the complete procurement workflow:

1. Generate CSR on server:
   openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

2. Copy CSR contents and submit to CA portal

3. Approve via DNS TXT record or email (admin@domain.com)

4. Download certificate bundle (server cert + intermediate)

5. Install certificate:
   - Apache: SSLCertificateFile /etc/ssl/certs/example.com.crt
   - Nginx: ssl_certificate /etc/ssl/certs/example.com.crt

6. Install intermediate chain:
   - Apache: SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
   - Nginx: ssl_trusted_certificate /etc/ssl/certs/intermediate.crt

7. Test configuration: nginx -t && systemctl reload nginx

8. Update documentation with new expiry date

Monitoring and Alerting Configuration

Document how you monitor certificate expiration:

# Prometheus alert rules example
- alert: SSLCertificateExpiringSoon
  expr: (ssl_cert_not_after - time()) < (30 * 24 * 3600)
  for: 1h
  labels:
    severity: warning
  annotations:
    summary: "SSL certificate expiring in 30 days"
    description: "{{ $labels.instance }} certificate expires in {{ $value | humanizeDuration }}"

- alert: SSLCertificateExpired
  expr: (ssl_cert_not_after - time()) < 0
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "SSL certificate has expired"
    description: "{{ $labels.instance }} certificate expired!"

Include your monitoring tool configuration, whether usingNagios, Zabbix, cloud-native monitoring, or a certificate monitoring service like CertSpotter or SSL Labs.

Creating Runbooks

Transform your documentation into actionable runbooks that anyone can follow during an incident.

Emergency Renewal Runbook Template

DNS/SSL EMERGENCY RENEWAL RUNBOOK
=================================

Incident Type: [ ] Certificate Expired [ ] DNS Failure [ ] Both

STEP 1: Assess Current Status (5 minutes)
-----------------------------------------
- Check certificate expiration: openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
- Verify DNS resolution: dig +short example.com
- Check current nameservers: dig +short NS example.com

STEP 2: Communication (Immediate)
--------------------------------
- Notify: [ ] CTO [ ] DevOps Lead [ ] Security Team
- Create incident ticket: [JIRA link]
- Update status page: [link]

STEP 3: Certificate Renewal
---------------------------
[ ] Access certificate authority portal: [URL]
[ ] Login using credentials from: [password manager / secrets vault]
[ ] Follow renewal steps in: [link to detailed procedure]
[ ] Deploy new certificate to: [server list]
[ ] Verify installation: openssl s_client -connect example.com:443

STEP 4: DNS Verification
------------------------
[ ] Verify all DNS records resolve correctly
[ ] Check DNSSEC if enabled: dig +dnssec example.com
[ ] Verify CDN propagation if applicable

STEP 5: Post-Renewal Tasks
--------------------------
- Update certificate inventory with new expiry date
- Close incident ticket
- Send completion notification

Pre-Planned Renewal Checklist

For scheduled renewals, use this checklist:

DNS/SSL SCHEDULED RENEWAL CHECKLIST
===================================

Certificate: [domain name]
Current Expiry: [date]
New Expiry: [date]
Scheduled Date: [date]
Assigned To: [name]

T-MINUS 30 DAYS
[ ] Receive expiration alert
[ ] Verify budget/approval for commercial certs
[ ] Prepare CSR if manual renewal required

T-MINUS 7 DAYS
[ ] Test renewal process in staging environment
[ ] Notify stakeholders of maintenance window
[ ] Verify backup certificate is available

T-MINUS 1 DAY
[ ] Confirm on-call team is aware
[ ] Verify rollback plan

RENEWAL DAY
[ ] Execute renewal (auto or manual)
[ ] Deploy to production
[ ] Verify certificate chain: ssllabs.com/ssltest/
[ ] Confirm website loads without warnings

T-PLUS 1 DAY
[ ] Monitor for issues
[ ] Update documentation with new expiry
[ ] Close maintenance ticket

Documentation Maintenance

Documentation requires ongoing maintenance to remain useful.

Review Schedule

Change Management

Every DNS or certificate change should follow your change management process:

  1. Request: Document the reason for the change
  2. Approval: Get sign-off from relevant stakeholders
  3. Implementation: Execute following documented procedures
  4. Verification: Confirm the change works as expected
  5. Documentation: Update all relevant documentation immediately
  6. Review: Post-implementation review for complex changes

Use version control for your documentation:

# Example git workflow for DNS documentation
git add dns/zones/example.com.zone
git commit -m "Add new subdomain for api.example.com
- Requested by: devops team
- Purpose: New API endpoint
- Approved by: CTO"
git push origin main

Tools and Automation

Consider these tools to improve documentation and reduce manual effort:

Certificate Management Platforms

DNS Management Tools

Monitoring Services

Built by theluckystrike — More at zovo.one