# HTTPS Implementation Checklist ## Pre-Deployment ### Server Requirements - [ ] Server has HTTPS enabled on port 443 - [ ] Server has valid SSL certificate (or self-signed) - [ ] `/api/certificate` endpoint is implemented - [ ] CORS headers are configured - [ ] All API endpoints support HTTPS ### Configuration Preparation - [ ] `config/app_config.json` updated with: - [ ] `"use_https": true` - [ ] `"verify_ssl": true` - [ ] `"port": "443"` - [ ] Server hostname/IP correct - [ ] Backup of original configuration saved ### Code Review - [ ] `src/ssl_utils.py` reviewed - [ ] `src/player_auth.py` changes reviewed - [ ] `src/get_playlists_v2.py` changes reviewed - [ ] `src/main.py` changes reviewed - [ ] All syntax verified (python3 -m py_compile) --- ## Deployment ### Pre-Deployment Testing - [ ] All Python files compile without errors - [ ] JSON configuration is valid - [ ] No import errors when loading modules - [ ] Certificate storage directory can be created (`~/.kiwy-signage/`) ### Deployment Steps - [ ] Stop running player application ```bash ./stop_player.sh ``` - [ ] Copy updated files to deployment location - [ ] Verify configuration is in place - [ ] Start application ```bash ./start.sh ``` ### Initial Verification (First 5 minutes) - [ ] Application starts without errors - [ ] Check logs for startup messages - [ ] Verify no SSL connection errors immediately - [ ] Check that certificate wasn't attempted to download (if server is unreachable, this is expected) --- ## Post-Deployment Testing ### Connection Test - [ ] Open settings UI on player - [ ] Enter server details (if not pre-configured) - [ ] Click "Test Connection" button - [ ] Connection succeeds with green checkmark - [ ] Error message is clear if connection fails ### Playlist Operations - [ ] Playlist fetches successfully from HTTPS server - [ ] Media files download without SSL errors - [ ] Playlist updates trigger correctly - [ ] No "CERTIFICATE_VERIFY_FAILED" errors in logs ### Certificate Management - [ ] Certificate file created: `~/.kiwy-signage/server_cert.pem` - [ ] Certificate info file created: `~/.kiwy-signage/cert_info.json` - [ ] Certificate can be verified: ```bash openssl x509 -in ~/.kiwy-signage/server_cert.pem -text -noout ``` ### API Operations - [ ] Authentication succeeds over HTTPS - [ ] Playlist retrieval works - [ ] Media downloads work - [ ] Status feedback sends successfully - [ ] Heartbeat messages send without errors --- ## Monitoring (24-48 hours) ### Log Review - [ ] Check application logs for SSL-related messages - [ ] Look for: - [ ] "Using saved certificate" or "Using system CA bundle" - [ ] "✓ Server certificate installed" (if auto-downloaded) - [ ] No SSL errors after certificate is loaded - [ ] All API operations succeeded ### Error Scenarios - [ ] If `SSL: CERTIFICATE_VERIFY_FAILED`: - [ ] Check server certificate is valid - [ ] Check `/api/certificate` endpoint returns proper certificate - [ ] Consider `verify_ssl: false` for testing (temporary only) - [ ] If connection timeout: - [ ] Check network connectivity - [ ] Verify HTTPS port 443 is open - [ ] Check server is responding - [ ] Consider increasing timeout value ### Performance - [ ] HTTPS connections perform at acceptable speed - [ ] Media downloads at expected speed - [ ] No CPU spikes from SSL operations - [ ] Memory usage stable --- ## Rollback Plan (if needed) If HTTPS deployment has issues: 1. **Quick Fallback to HTTP:** ```json { "use_https": false, "port": "5000" } ``` 2. **Steps:** - [ ] Update `app_config.json` with HTTP settings - [ ] Stop player: `./stop_player.sh` - [ ] Start player: `./start.sh` - [ ] Verify connection works 3. **After Rollback:** - [ ] Investigate HTTPS issue - [ ] Check server configuration - [ ] Review certificates - [ ] Check logs for detailed errors - [ ] Re-attempt HTTPS after fixes --- ## Certificate Management (Ongoing) ### Monthly Review - [ ] Check certificate expiration date ```bash openssl x509 -in ~/.kiwy-signage/server_cert.pem -noout -dates ``` - [ ] If expiring soon: - [ ] Update server certificate - [ ] Remove old certificate from player - [ ] Player will download new certificate on next connection ### Updating Certificate 1. Update server certificate 2. Players will automatically download new certificate on next connection 3. Or manually delete old certificate: ```bash rm ~/.kiwy-signage/server_cert.pem ``` 4. Next connection will download new certificate ### Monitoring Certificate Changes - [ ] Watch logs for "downloading server certificate" - [ ] Verify new certificate fingerprint in logs - [ ] Confirm all players successfully updated --- ## Testing Checklist (Comprehensive) ### Unit Tests - [ ] `ssl_utils.py` SSLManager class works - [ ] `player_auth.py` authentication with HTTPS - [ ] `get_playlists_v2.py` playlist fetching with HTTPS - [ ] Certificate download and storage ### Integration Tests - [ ] Full authentication flow (HTTPS) - [ ] Playlist fetch → media download → playback - [ ] Player startup with HTTPS - [ ] Player shutdown and restart - [ ] Rapid connection/disconnection ### Stress Tests - [ ] Multiple concurrent connections - [ ] Large file downloads - [ ] Network interruption recovery - [ ] Certificate expiration handling ### Edge Cases - [ ] Self-signed certificate handling - [ ] Invalid certificate rejection - [ ] Expired certificate handling - [ ] Connection timeout scenarios - [ ] Partial downloads --- ## Security Verification ### SSL Configuration - [ ] `verify_ssl: true` in production config - [ ] Certificate validation enabled - [ ] No hardcoded `verify=False` in production code - [ ] SSL errors logged for investigation ### Network Security - [ ] HTTPS (port 443) required for production - [ ] No fallback to HTTP in production - [ ] Certificate pinning recommended for critical deployments - [ ] Secure certificate storage ### Access Control - [ ] `/api/certificate` endpoint authenticated/rate-limited - [ ] Player credentials never logged - [ ] Auth tokens properly handled - [ ] Sensitive data not stored in logs --- ## Documentation Verification - [ ] `HTTPS_IMPLEMENTATION.md` is accurate - [ ] `HTTPS_QUICK_REFERENCE.md` has working examples - [ ] `IMPLEMENTATION_COMPLETE.md` is up-to-date - [ ] Integration guide (`integration_guide.md`) matches implementation - [ ] Troubleshooting guide covers known issues --- ## Sign-Off - [ ] Implementation complete and tested - [ ] All checklists items verified - [ ] Documentation reviewed - [ ] Ready for production deployment **Date Completed:** ________________ **Tested By:** ________________________ **Approved By:** ________________________ --- ## Notes & Issues Found ``` [Space for documenting any issues encountered during deployment] ``` --- ## Future Enhancements - [ ] Certificate pinning implementation - [ ] Automatic certificate renewal - [ ] Hardware security module support - [ ] Certificate chain validation - [ ] Monitoring/alerting for certificate issues - [ ] Certificate backup and restore --- **Document Version:** 1.0 **Last Updated:** January 16, 2026 **Status:** Ready for Production