219 lines
5.0 KiB
Markdown
219 lines
5.0 KiB
Markdown
# Samba API - HTTPS Configuration
|
|
|
|
This guide explains how to use the Samba API with HTTPS support.
|
|
|
|
## 🔒 HTTPS Setup
|
|
|
|
The Samba API now supports HTTPS with SSL/TLS encryption for secure communication.
|
|
|
|
### Components
|
|
|
|
1. **Self-signed SSL certificates** (generated automatically)
|
|
2. **Direct HTTPS support** via Uvicorn
|
|
3. **Optional Nginx reverse proxy** for production use
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### 1. Standard HTTPS (Direct)
|
|
|
|
```bash
|
|
# Start with HTTPS enabled
|
|
docker-compose up -d
|
|
|
|
# The API will be available at:
|
|
# - HTTPS: https://localhost:8443
|
|
# - HTTP: http://localhost:8000 (fallback)
|
|
```
|
|
|
|
### 2. Production with Nginx (Optional)
|
|
|
|
```bash
|
|
# Start with Nginx reverse proxy
|
|
docker-compose --profile production up -d
|
|
|
|
# The API will be available at:
|
|
# - HTTPS: https://localhost:443 (via Nginx)
|
|
# - HTTP: http://localhost:80 (redirects to HTTPS)
|
|
```
|
|
|
|
## 📋 Configuration
|
|
|
|
### Environment Variables
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `USE_HTTPS` | `true` | Enable HTTPS support |
|
|
| `PORT` | `8000` | HTTP port |
|
|
| `HTTPS_PORT` | `8443` | HTTPS port |
|
|
| `HOST` | `0.0.0.0` | Bind address |
|
|
| `DEBUG` | `true` | Enable debug mode |
|
|
|
|
### SSL Certificates
|
|
|
|
The API uses self-signed certificates located in `/app/ssl/`:
|
|
- `server.crt` - SSL certificate
|
|
- `server.key` - Private key
|
|
|
|
For production, replace these with certificates from a trusted CA.
|
|
|
|
## 🔧 API Endpoints
|
|
|
|
### Base URLs
|
|
- **HTTPS**: `https://localhost:8443`
|
|
- **HTTP**: `http://localhost:8000`
|
|
|
|
### Key Endpoints
|
|
|
|
| Endpoint | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `/` | GET | API status |
|
|
| `/health` | GET | Health check |
|
|
| `/docs` | GET | Interactive API documentation |
|
|
| `/api/v1/auth/login` | POST | User authentication |
|
|
| `/api/v1/users` | GET | List users |
|
|
| `/api/v1/groups` | GET | List groups |
|
|
|
|
## 🔑 Authentication
|
|
|
|
### Login Request
|
|
|
|
```bash
|
|
curl -k -X POST "https://localhost:8443/api/v1/auth/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "Administrator@example.com",
|
|
"password": "Admin123!@#"
|
|
}'
|
|
```
|
|
|
|
### Using Bearer Token
|
|
|
|
```bash
|
|
# Get token from login response
|
|
TOKEN="your-jwt-token"
|
|
|
|
# Use token in subsequent requests
|
|
curl -k -H "Authorization: Bearer $TOKEN" \
|
|
"https://localhost:8443/api/v1/users"
|
|
```
|
|
|
|
## 🌐 API Documentation
|
|
|
|
Access the interactive API documentation:
|
|
- **Swagger UI**: https://localhost:8443/docs
|
|
- **ReDoc**: https://localhost:8443/redoc
|
|
- **OpenAPI JSON**: https://localhost:8443/openapi.json
|
|
|
|
## 🔒 Security Features
|
|
|
|
### SSL/TLS Configuration
|
|
- **Protocols**: TLS 1.2, TLS 1.3
|
|
- **Ciphers**: Strong encryption only
|
|
- **HSTS**: Strict Transport Security enabled
|
|
|
|
### Security Headers
|
|
- `X-Frame-Options: DENY`
|
|
- `X-Content-Type-Options: nosniff`
|
|
- `X-XSS-Protection: 1; mode=block`
|
|
- `Strict-Transport-Security: max-age=63072000`
|
|
|
|
## 🔧 Development vs Production
|
|
|
|
### Development (Current Setup)
|
|
```yaml
|
|
environment:
|
|
- USE_HTTPS=true
|
|
- DEBUG=true
|
|
ports:
|
|
- "8000:8000" # HTTP
|
|
- "8443:8443" # HTTPS
|
|
```
|
|
|
|
### Production with Nginx
|
|
```yaml
|
|
# Use docker-compose-https.yml
|
|
services:
|
|
nginx-ssl:
|
|
ports:
|
|
- "80:80" # HTTP (redirects)
|
|
- "443:443" # HTTPS
|
|
```
|
|
|
|
## 📝 Testing
|
|
|
|
### Health Check
|
|
```bash
|
|
# HTTPS
|
|
curl -k https://localhost:8443/health
|
|
|
|
# HTTP
|
|
curl http://localhost:8000/health
|
|
```
|
|
|
|
### API Status
|
|
```bash
|
|
curl -k https://localhost:8443/
|
|
```
|
|
|
|
### Authentication Test
|
|
```bash
|
|
curl -k -X POST "https://localhost:8443/api/v1/auth/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username": "Administrator@example.com", "password": "Admin123!@#"}'
|
|
```
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Certificate Warnings**
|
|
- Use `-k` flag with curl for self-signed certificates
|
|
- For browsers, accept the security warning
|
|
|
|
2. **Connection Refused**
|
|
- Check if the container is running: `docker-compose ps`
|
|
- Verify logs: `docker-compose logs samba-api`
|
|
|
|
3. **Authentication Failures**
|
|
- Verify Samba DC is running: `docker-compose logs samba-dc`
|
|
- Check LDAP connectivity from API container
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# View API logs
|
|
docker-compose logs -f samba-api
|
|
|
|
# View Samba DC logs
|
|
docker-compose logs -f samba-dc
|
|
|
|
# View all logs
|
|
docker-compose logs -f
|
|
```
|
|
|
|
## 🔄 Certificate Renewal
|
|
|
|
For production use, set up automatic certificate renewal:
|
|
|
|
```bash
|
|
# Example with Let's Encrypt (certbot)
|
|
certbot certonly --webroot -w /data/apps/samba-api/ssl \
|
|
-d your-domain.com
|
|
|
|
# Copy certificates
|
|
cp /etc/letsencrypt/live/your-domain.com/fullchain.pem ./ssl/server.crt
|
|
cp /etc/letsencrypt/live/your-domain.com/privkey.pem ./ssl/server.key
|
|
|
|
# Restart services
|
|
docker-compose restart
|
|
```
|
|
|
|
## 📚 Additional Resources
|
|
|
|
- [FastAPI HTTPS Documentation](https://fastapi.tiangolo.com/deployment/https/)
|
|
- [Uvicorn SSL Configuration](https://www.uvicorn.org/settings/#https)
|
|
- [Docker Compose Profiles](https://docs.docker.com/compose/profiles/)
|
|
|
|
---
|
|
|
|
**Note**: The current setup uses self-signed certificates for development. For production environments, use certificates from a trusted Certificate Authority (CA) or Let's Encrypt. |