gateway/tool_security_generate_master_keys.py
2025-09-24 23:18:10 +02:00

89 lines
3 KiB
Python

#!/usr/bin/env python3
"""
Generate secure master keys for all environments.
This tool generates cryptographically secure 256-bit master keys for all environments
and updates the key.txt file with the new keys.
Usage:
python generate_master_keys.py
python generate_master_keys.py --output "path/to/key.txt"
"""
import sys
import os
import secrets
import base64
import argparse
from pathlib import Path
def generate_master_key():
"""Generate a secure 256-bit master key."""
# Generate 32 random bytes (256 bits)
key_bytes = secrets.token_bytes(32)
# Encode as base64 for easy storage
return base64.urlsafe_b64encode(key_bytes).decode('utf-8')
def main():
parser = argparse.ArgumentParser(description='Generate secure master keys for all environments')
parser.add_argument('--output', '-o',
default='../local/key.txt',
help='Output file path (default: ../local/key.txt)')
parser.add_argument('--force', '-f', action='store_true',
help='Overwrite existing key file without confirmation')
args = parser.parse_args()
# Convert to absolute path
output_path = Path(args.output).resolve()
# Check if file exists and get confirmation
if output_path.exists() and not args.force:
response = input(f"File {output_path} already exists. Overwrite? (y/N): ")
if response.lower() != 'y':
print("Operation cancelled.")
return
try:
# Generate keys for all environments
keys = {
'prod': generate_master_key(),
'int': generate_master_key(),
'dev': generate_master_key()
}
# Create output content
content = []
content.append("# PowerOn Master Keys")
content.append("# Generated on: " + str(Path(__file__).stat().st_mtime))
content.append("# WARNING: Keep this file secure and never commit to version control!")
content.append("")
for env, key in keys.items():
content.append(f"{env} = {key}")
# Ensure output directory exists
output_path.parent.mkdir(parents=True, exist_ok=True)
# Write to file
with open(output_path, 'w', encoding='utf-8') as f:
f.write('\n'.join(content))
print("✓ Master keys generated successfully!")
print(f"Output file: {output_path}")
print("\nGenerated keys:")
for env, key in keys.items():
print(f" {env}: {key[:20]}...")
print(f"\n⚠️ IMPORTANT SECURITY NOTES:")
print(f" - Keep this file secure and never commit to version control")
print(f" - Store production keys in Azure environment variables")
print(f" - Share development keys securely with team members")
print(f" - Consider rotating keys regularly")
except Exception as e:
print(f"Error generating keys: {e}")
sys.exit(1)
if __name__ == '__main__':
main()