mcp-proxy-adapter 6.1.1__py3-none-any.whl → 6.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mcp_proxy_adapter/__main__.py +27 -7
- mcp_proxy_adapter/api/app.py +18 -7
- mcp_proxy_adapter/commands/ssl_setup_command.py +234 -351
- mcp_proxy_adapter/core/app_factory.py +87 -3
- mcp_proxy_adapter/core/app_runner.py +272 -0
- mcp_proxy_adapter/core/certificate_utils.py +291 -73
- mcp_proxy_adapter/core/client.py +574 -0
- mcp_proxy_adapter/core/client_manager.py +284 -0
- mcp_proxy_adapter/core/server_adapter.py +17 -80
- mcp_proxy_adapter/core/server_engine.py +5 -99
- mcp_proxy_adapter/core/ssl_utils.py +13 -12
- mcp_proxy_adapter/core/transport_manager.py +5 -5
- mcp_proxy_adapter/examples/__init__.py +16 -0
- mcp_proxy_adapter/examples/basic_framework/__init__.py +7 -0
- mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +4 -0
- mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +4 -0
- mcp_proxy_adapter/examples/basic_framework/main.py +21 -40
- mcp_proxy_adapter/examples/commands/__init__.py +5 -1
- mcp_proxy_adapter/examples/create_certificates_simple.py +260 -75
- mcp_proxy_adapter/examples/debug_request_state.py +4 -36
- mcp_proxy_adapter/examples/debug_role_chain.py +2 -49
- mcp_proxy_adapter/examples/demo_client.py +0 -66
- mcp_proxy_adapter/examples/full_application/__init__.py +11 -0
- mcp_proxy_adapter/examples/full_application/commands/__init__.py +7 -0
- mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +0 -19
- mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +0 -16
- mcp_proxy_adapter/examples/full_application/hooks/__init__.py +7 -0
- mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +0 -22
- mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +0 -24
- mcp_proxy_adapter/examples/full_application/main.py +65 -44
- mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +154 -0
- mcp_proxy_adapter/examples/generate_all_certificates.py +0 -67
- mcp_proxy_adapter/examples/generate_certificates.py +0 -15
- mcp_proxy_adapter/examples/generate_certificates_and_tokens.py +369 -0
- mcp_proxy_adapter/examples/generate_test_configs.py +204 -0
- mcp_proxy_adapter/examples/proxy_registration_example.py +3 -70
- mcp_proxy_adapter/examples/run_example.py +1 -23
- mcp_proxy_adapter/examples/run_security_tests.py +2 -60
- mcp_proxy_adapter/examples/run_security_tests_fixed.py +0 -53
- mcp_proxy_adapter/examples/security_test_client.py +18 -123
- mcp_proxy_adapter/examples/setup_test_environment.py +179 -0
- mcp_proxy_adapter/examples/test_config.py +148 -0
- mcp_proxy_adapter/examples/test_config_generator.py +1 -25
- mcp_proxy_adapter/examples/test_examples.py +4 -67
- mcp_proxy_adapter/examples/universal_client.py +154 -162
- mcp_proxy_adapter/main.py +51 -161
- mcp_proxy_adapter/version.py +1 -1
- mcp_proxy_adapter-6.2.0.dist-info/METADATA +687 -0
- mcp_proxy_adapter-6.2.0.dist-info/RECORD +122 -0
- mcp_proxy_adapter/docs/EN/TROUBLESHOOTING.md +0 -285
- mcp_proxy_adapter/docs/RU/TROUBLESHOOTING.md +0 -285
- mcp_proxy_adapter/examples/README.md +0 -257
- mcp_proxy_adapter/examples/README_EN.md +0 -258
- mcp_proxy_adapter/examples/SECURITY_TESTING.md +0 -455
- mcp_proxy_adapter/examples/basic_framework/configs/http_auth.json +0 -37
- mcp_proxy_adapter/examples/basic_framework/configs/http_simple.json +0 -23
- mcp_proxy_adapter/examples/basic_framework/configs/https_auth.json +0 -43
- mcp_proxy_adapter/examples/basic_framework/configs/https_no_protocol_middleware.json +0 -36
- mcp_proxy_adapter/examples/basic_framework/configs/https_simple.json +0 -29
- mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_protocol_middleware.json +0 -34
- mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_roles.json +0 -39
- mcp_proxy_adapter/examples/basic_framework/configs/mtls_simple.json +0 -35
- mcp_proxy_adapter/examples/basic_framework/configs/mtls_with_roles.json +0 -45
- mcp_proxy_adapter/examples/basic_framework/roles.json +0 -21
- mcp_proxy_adapter/examples/cert_config.json +0 -9
- mcp_proxy_adapter/examples/certs/admin.crt +0 -32
- mcp_proxy_adapter/examples/certs/admin.key +0 -52
- mcp_proxy_adapter/examples/certs/admin_cert.pem +0 -21
- mcp_proxy_adapter/examples/certs/admin_key.pem +0 -28
- mcp_proxy_adapter/examples/certs/ca_cert.pem +0 -23
- mcp_proxy_adapter/examples/certs/ca_cert.srl +0 -1
- mcp_proxy_adapter/examples/certs/ca_key.pem +0 -28
- mcp_proxy_adapter/examples/certs/cert_config.json +0 -9
- mcp_proxy_adapter/examples/certs/client.crt +0 -32
- mcp_proxy_adapter/examples/certs/client.key +0 -52
- mcp_proxy_adapter/examples/certs/client_admin.crt +0 -32
- mcp_proxy_adapter/examples/certs/client_admin.key +0 -52
- mcp_proxy_adapter/examples/certs/client_user.crt +0 -32
- mcp_proxy_adapter/examples/certs/client_user.key +0 -52
- mcp_proxy_adapter/examples/certs/guest_cert.pem +0 -21
- mcp_proxy_adapter/examples/certs/guest_key.pem +0 -28
- mcp_proxy_adapter/examples/certs/mcp_proxy_adapter_ca_ca.crt +0 -23
- mcp_proxy_adapter/examples/certs/proxy_cert.pem +0 -21
- mcp_proxy_adapter/examples/certs/proxy_key.pem +0 -28
- mcp_proxy_adapter/examples/certs/readonly.crt +0 -32
- mcp_proxy_adapter/examples/certs/readonly.key +0 -52
- mcp_proxy_adapter/examples/certs/readonly_cert.pem +0 -21
- mcp_proxy_adapter/examples/certs/readonly_key.pem +0 -28
- mcp_proxy_adapter/examples/certs/server.crt +0 -32
- mcp_proxy_adapter/examples/certs/server.key +0 -52
- mcp_proxy_adapter/examples/certs/server_cert.pem +0 -32
- mcp_proxy_adapter/examples/certs/server_key.pem +0 -52
- mcp_proxy_adapter/examples/certs/test_ca_ca.crt +0 -20
- mcp_proxy_adapter/examples/certs/user.crt +0 -32
- mcp_proxy_adapter/examples/certs/user.key +0 -52
- mcp_proxy_adapter/examples/certs/user_cert.pem +0 -21
- mcp_proxy_adapter/examples/certs/user_key.pem +0 -28
- mcp_proxy_adapter/examples/client_configs/api_key_client.json +0 -13
- mcp_proxy_adapter/examples/client_configs/basic_auth_client.json +0 -13
- mcp_proxy_adapter/examples/client_configs/certificate_client.json +0 -22
- mcp_proxy_adapter/examples/client_configs/jwt_client.json +0 -15
- mcp_proxy_adapter/examples/client_configs/no_auth_client.json +0 -9
- mcp_proxy_adapter/examples/full_application/configs/http_auth.json +0 -37
- mcp_proxy_adapter/examples/full_application/configs/http_simple.json +0 -23
- mcp_proxy_adapter/examples/full_application/configs/https_auth.json +0 -39
- mcp_proxy_adapter/examples/full_application/configs/https_simple.json +0 -25
- mcp_proxy_adapter/examples/full_application/configs/mtls_no_roles.json +0 -39
- mcp_proxy_adapter/examples/full_application/configs/mtls_with_roles.json +0 -45
- mcp_proxy_adapter/examples/full_application/roles.json +0 -21
- mcp_proxy_adapter/examples/keys/ca_key.pem +0 -28
- mcp_proxy_adapter/examples/keys/mcp_proxy_adapter_ca_ca.key +0 -28
- mcp_proxy_adapter/examples/keys/test_ca_ca.key +0 -28
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log +0 -220
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.1 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.2 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.3 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.4 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.5 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log +0 -220
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.1 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.2 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.3 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.4 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.5 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log +0 -2
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.1 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.2 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.3 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.4 +0 -1
- mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.5 +0 -1
- mcp_proxy_adapter/examples/roles.json +0 -38
- mcp_proxy_adapter/examples/server_configs/config_basic_http.json +0 -204
- mcp_proxy_adapter/examples/server_configs/config_http_token.json +0 -238
- mcp_proxy_adapter/examples/server_configs/config_https.json +0 -215
- mcp_proxy_adapter/examples/server_configs/config_https_token.json +0 -231
- mcp_proxy_adapter/examples/server_configs/config_mtls.json +0 -215
- mcp_proxy_adapter/examples/server_configs/config_proxy_registration.json +0 -250
- mcp_proxy_adapter/examples/server_configs/config_simple.json +0 -46
- mcp_proxy_adapter/examples/server_configs/roles.json +0 -38
- mcp_proxy_adapter-6.1.1.dist-info/METADATA +0 -205
- mcp_proxy_adapter-6.1.1.dist-info/RECORD +0 -197
- {mcp_proxy_adapter-6.1.1.dist-info → mcp_proxy_adapter-6.2.0.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-6.1.1.dist-info → mcp_proxy_adapter-6.2.0.dist-info}/entry_points.txt +0 -0
- {mcp_proxy_adapter-6.1.1.dist-info → mcp_proxy_adapter-6.2.0.dist-info}/licenses/LICENSE +0 -0
- {mcp_proxy_adapter-6.1.1.dist-info → mcp_proxy_adapter-6.2.0.dist-info}/top_level.txt +0 -0
@@ -1,258 +0,0 @@
|
|
1
|
-
# MCP Proxy Adapter - Examples and Security Testing
|
2
|
-
|
3
|
-
This directory contains examples of using MCP Proxy Adapter with various security configurations and a comprehensive testing system.
|
4
|
-
|
5
|
-
## 📁 Directory Structure
|
6
|
-
|
7
|
-
```
|
8
|
-
examples/
|
9
|
-
├── README.md # This documentation
|
10
|
-
├── README_EN.md # English documentation
|
11
|
-
├── SECURITY_TESTING.md # Security testing documentation
|
12
|
-
├── generate_certificates.py # Certificate generation script
|
13
|
-
├── security_test_client.py # Security testing client
|
14
|
-
├── run_security_tests.py # Main test runner script
|
15
|
-
├── cert_config.json # Certificate generation configuration
|
16
|
-
├── certs/ # Generated certificates
|
17
|
-
├── keys/ # Private keys
|
18
|
-
├── server_configs/ # Server configurations
|
19
|
-
│ ├── config_basic_http.json # Basic HTTP
|
20
|
-
│ ├── config_http_token.json # HTTP + token
|
21
|
-
│ ├── config_https.json # HTTPS
|
22
|
-
│ ├── config_https_token.json # HTTPS + token
|
23
|
-
│ ├── config_mtls.json # mTLS
|
24
|
-
│ └── roles.json # Roles and permissions
|
25
|
-
└── commands/ # Custom commands
|
26
|
-
└── __init__.py
|
27
|
-
```
|
28
|
-
|
29
|
-
## 🚀 Quick Start
|
30
|
-
|
31
|
-
### 1. Environment Setup
|
32
|
-
|
33
|
-
```bash
|
34
|
-
# Activate virtual environment
|
35
|
-
source .venv/bin/activate
|
36
|
-
|
37
|
-
# Install dependencies
|
38
|
-
pip install -e .
|
39
|
-
```
|
40
|
-
|
41
|
-
### 2. Generate Certificates
|
42
|
-
|
43
|
-
```bash
|
44
|
-
# Generate all necessary certificates
|
45
|
-
cd mcp_proxy_adapter/examples
|
46
|
-
python generate_certificates.py
|
47
|
-
```
|
48
|
-
|
49
|
-
### 3. Run Security Tests
|
50
|
-
|
51
|
-
```bash
|
52
|
-
# Run all security tests
|
53
|
-
python run_security_tests.py
|
54
|
-
```
|
55
|
-
|
56
|
-
## 🔧 Server Configurations
|
57
|
-
|
58
|
-
### Basic HTTP (port 8000)
|
59
|
-
```bash
|
60
|
-
python -m mcp_proxy_adapter.main --config server_configs/config_basic_http.json
|
61
|
-
```
|
62
|
-
|
63
|
-
### HTTP + Token Authentication (port 8001)
|
64
|
-
```bash
|
65
|
-
python -m mcp_proxy_adapter.main --config server_configs/config_http_token.json
|
66
|
-
```
|
67
|
-
|
68
|
-
### HTTPS (port 8443)
|
69
|
-
```bash
|
70
|
-
python -m mcp_proxy_adapter.main --config server_configs/config_https.json
|
71
|
-
```
|
72
|
-
|
73
|
-
### HTTPS + Token Authentication (port 8444)
|
74
|
-
```bash
|
75
|
-
python -m mcp_proxy_adapter.main --config server_configs/config_https_token.json
|
76
|
-
```
|
77
|
-
|
78
|
-
### mTLS (port 8445)
|
79
|
-
```bash
|
80
|
-
python -m mcp_proxy_adapter.main --config server_configs/config_mtls.json
|
81
|
-
```
|
82
|
-
|
83
|
-
## 🧪 Testing
|
84
|
-
|
85
|
-
### Testing Individual Server
|
86
|
-
|
87
|
-
```bash
|
88
|
-
# Test basic HTTP server
|
89
|
-
python security_test_client.py --server http://localhost:8000 --auth none
|
90
|
-
|
91
|
-
# Test HTTP with token
|
92
|
-
python security_test_client.py --server http://localhost:8001 --auth api_key --token test-token-123
|
93
|
-
|
94
|
-
# Test HTTPS server
|
95
|
-
python security_test_client.py --server https://localhost:8443 --auth none
|
96
|
-
|
97
|
-
# Test HTTPS with token
|
98
|
-
python security_test_client.py --server https://localhost:8444 --auth api_key --token test-token-123
|
99
|
-
|
100
|
-
# Test mTLS with certificate
|
101
|
-
python security_test_client.py --server https://localhost:8445 --auth certificate --cert certs/admin_cert.pem --key keys/admin_key.pem --ca-cert certs/ca_cert.pem
|
102
|
-
```
|
103
|
-
|
104
|
-
### Testing All Scenarios
|
105
|
-
|
106
|
-
```bash
|
107
|
-
# Start all servers and test them
|
108
|
-
python run_security_tests.py
|
109
|
-
```
|
110
|
-
|
111
|
-
## 📋 Testing Scenarios
|
112
|
-
|
113
|
-
### 1. Basic HTTP (config_basic_http.json)
|
114
|
-
- **Port**: 8000
|
115
|
-
- **Security**: Disabled
|
116
|
-
- **Authentication**: None
|
117
|
-
- **Tests**: Health check, echo command
|
118
|
-
|
119
|
-
### 2. HTTP + Token (config_http_token.json)
|
120
|
-
- **Port**: 8001
|
121
|
-
- **Security**: API Key authentication
|
122
|
-
- **Tokens**:
|
123
|
-
- `test-token-123` (admin)
|
124
|
-
- `user-token-456` (user)
|
125
|
-
- **Tests**: Role-based authentication, negative tests
|
126
|
-
|
127
|
-
### 3. HTTPS (config_https.json)
|
128
|
-
- **Port**: 8443
|
129
|
-
- **Security**: SSL/TLS
|
130
|
-
- **Certificates**: Self-signed
|
131
|
-
- **Tests**: Secure connections
|
132
|
-
|
133
|
-
### 4. HTTPS + Token (config_https_token.json)
|
134
|
-
- **Port**: 8444
|
135
|
-
- **Security**: SSL/TLS + API Key
|
136
|
-
- **Tests**: Combined security
|
137
|
-
|
138
|
-
### 5. mTLS (config_mtls.json)
|
139
|
-
- **Port**: 8445
|
140
|
-
- **Security**: Mutual certificate authentication
|
141
|
-
- **Tests**: Certificate authentication
|
142
|
-
|
143
|
-
## 🔑 Test Tokens
|
144
|
-
|
145
|
-
```json
|
146
|
-
{
|
147
|
-
"test-token-123": {
|
148
|
-
"roles": ["admin"],
|
149
|
-
"permissions": ["*"]
|
150
|
-
},
|
151
|
-
"user-token-456": {
|
152
|
-
"roles": ["user"],
|
153
|
-
"permissions": ["read", "execute"]
|
154
|
-
}
|
155
|
-
}
|
156
|
-
```
|
157
|
-
|
158
|
-
## 📜 Roles and Permissions
|
159
|
-
|
160
|
-
```json
|
161
|
-
{
|
162
|
-
"admin": ["*"],
|
163
|
-
"user": ["read", "write", "execute"],
|
164
|
-
"readonly": ["read"],
|
165
|
-
"guest": ["read"]
|
166
|
-
}
|
167
|
-
```
|
168
|
-
|
169
|
-
## 🛠️ Configuration Generation
|
170
|
-
|
171
|
-
Use the built-in configuration generator:
|
172
|
-
|
173
|
-
```bash
|
174
|
-
# Generate all configuration types
|
175
|
-
python -m mcp_proxy_adapter.utils.config_generator --all --output-dir ./generated_configs
|
176
|
-
|
177
|
-
# Generate specific type
|
178
|
-
python -m mcp_proxy_adapter.utils.config_generator --type https_token --output ./my_config.json
|
179
|
-
```
|
180
|
-
|
181
|
-
Available configuration types:
|
182
|
-
- `minimal` - Minimal configuration
|
183
|
-
- `development` - For development
|
184
|
-
- `secure` - Maximum security
|
185
|
-
- `full` - Full configuration
|
186
|
-
- `basic_http` - Basic HTTP
|
187
|
-
- `http_token` - HTTP + token
|
188
|
-
- `https` - HTTPS
|
189
|
-
- `https_token` - HTTPS + token
|
190
|
-
- `mtls` - mTLS
|
191
|
-
|
192
|
-
## 🔍 Monitoring and Logs
|
193
|
-
|
194
|
-
Logs are saved to:
|
195
|
-
- `./logs/server.log` - Server logs
|
196
|
-
- `./logs/security.log` - Security logs
|
197
|
-
|
198
|
-
To view logs in real-time:
|
199
|
-
```bash
|
200
|
-
tail -f logs/server.log
|
201
|
-
tail -f logs/security.log
|
202
|
-
```
|
203
|
-
|
204
|
-
## 🚨 Troubleshooting
|
205
|
-
|
206
|
-
### Issue: Certificates not found
|
207
|
-
```bash
|
208
|
-
# Check certificate availability
|
209
|
-
ls -la certs/
|
210
|
-
ls -la keys/
|
211
|
-
|
212
|
-
# Regenerate certificates
|
213
|
-
python generate_certificates.py
|
214
|
-
```
|
215
|
-
|
216
|
-
### Issue: Port in use
|
217
|
-
```bash
|
218
|
-
# Find process using port
|
219
|
-
lsof -i :8000
|
220
|
-
lsof -i :8443
|
221
|
-
|
222
|
-
# Stop process
|
223
|
-
kill -9 <PID>
|
224
|
-
```
|
225
|
-
|
226
|
-
### Issue: SSL errors
|
227
|
-
```bash
|
228
|
-
# Check certificates
|
229
|
-
openssl x509 -in certs/server_cert.pem -text -noout
|
230
|
-
|
231
|
-
# Check private key
|
232
|
-
openssl rsa -in keys/server_key.pem -check
|
233
|
-
```
|
234
|
-
|
235
|
-
## 📚 Additional Documentation
|
236
|
-
|
237
|
-
- [SECURITY_TESTING.md](SECURITY_TESTING.md) - Detailed security testing guide
|
238
|
-
- [API Documentation](../docs/api/) - API documentation
|
239
|
-
- [Configuration Guide](../docs/configuration.md) - Configuration guide
|
240
|
-
|
241
|
-
## 🤝 Support
|
242
|
-
|
243
|
-
If you encounter issues:
|
244
|
-
|
245
|
-
1. Check logs in `./logs/`
|
246
|
-
2. Ensure all dependencies are installed
|
247
|
-
3. Verify certificates are generated correctly
|
248
|
-
4. Refer to troubleshooting documentation
|
249
|
-
|
250
|
-
## 📄 License
|
251
|
-
|
252
|
-
This project is licensed under the MIT License. See the [LICENSE](../../LICENSE) file for details.
|
253
|
-
|
254
|
-
---
|
255
|
-
|
256
|
-
**Author**: Vasiliy Zdanovskiy
|
257
|
-
**Email**: vasilyvz@gmail.com
|
258
|
-
**Version**: 1.0.0
|
@@ -1,455 +0,0 @@
|
|
1
|
-
# Security Testing Framework
|
2
|
-
|
3
|
-
This directory contains a comprehensive security testing framework for MCP Proxy Adapter that validates various security configurations and scenarios.
|
4
|
-
|
5
|
-
**Author**: Vasiliy Zdanovskiy
|
6
|
-
**Email**: vasilyvz@gmail.com
|
7
|
-
|
8
|
-
## Overview
|
9
|
-
|
10
|
-
The security testing framework provides:
|
11
|
-
|
12
|
-
- **Positive Tests**: Valid security configurations that should work
|
13
|
-
- **Negative Tests**: Invalid configurations that should be rejected
|
14
|
-
- **Certificate Tests**: mTLS and certificate-based authentication testing
|
15
|
-
- **Multiple Server Configurations**: HTTP, HTTPS, Token Auth, mTLS
|
16
|
-
- **Client Testing**: Using mcp_security_framework for comprehensive client testing
|
17
|
-
|
18
|
-
## Directory Structure
|
19
|
-
|
20
|
-
```
|
21
|
-
examples/
|
22
|
-
├── security_test_client.py # Security test client using mcp_security_framework
|
23
|
-
├── run_security_tests.py # Main test runner
|
24
|
-
├── server_configs/ # Server configuration files
|
25
|
-
│ ├── config_basic_http.json # Basic HTTP without security
|
26
|
-
│ ├── config_http_token.json # HTTP with token authentication
|
27
|
-
│ ├── config_https.json # HTTPS without authentication
|
28
|
-
│ ├── config_https_token.json # HTTPS with token authentication
|
29
|
-
│ ├── config_mtls.json # mTLS with certificate authentication
|
30
|
-
│ └── roles.json # Role definitions for testing
|
31
|
-
└── SECURITY_TESTING.md # This file
|
32
|
-
```
|
33
|
-
|
34
|
-
## Server Configurations
|
35
|
-
|
36
|
-
### 1. Basic HTTP (config_basic_http.json)
|
37
|
-
- **Port**: 8000
|
38
|
-
- **Security**: Disabled
|
39
|
-
- **Authentication**: None
|
40
|
-
- **SSL/TLS**: Disabled
|
41
|
-
- **Use Case**: Basic testing without security
|
42
|
-
|
43
|
-
### 2. HTTP + Token (config_http_token.json)
|
44
|
-
- **Port**: 8001
|
45
|
-
- **Security**: Enabled
|
46
|
-
- **Authentication**: API Key
|
47
|
-
- **SSL/TLS**: Disabled
|
48
|
-
- **Use Case**: Token-based authentication over HTTP
|
49
|
-
|
50
|
-
### 3. HTTPS (config_https.json)
|
51
|
-
- **Port**: 8443
|
52
|
-
- **Security**: Enabled
|
53
|
-
- **Authentication**: None
|
54
|
-
- **SSL/TLS**: Enabled
|
55
|
-
- **Use Case**: Secure communication without authentication
|
56
|
-
|
57
|
-
### 4. HTTPS + Token (config_https_token.json)
|
58
|
-
- **Port**: 8444
|
59
|
-
- **Security**: Enabled
|
60
|
-
- **Authentication**: API Key
|
61
|
-
- **SSL/TLS**: Enabled
|
62
|
-
- **Use Case**: Secure communication with token authentication
|
63
|
-
|
64
|
-
### 5. mTLS (config_mtls.json)
|
65
|
-
- **Port**: 9443
|
66
|
-
- **Security**: Enabled
|
67
|
-
- **Authentication**: Certificate-based
|
68
|
-
- **SSL/TLS**: Enabled with mutual authentication
|
69
|
-
- **Use Case**: Highest security with certificate validation
|
70
|
-
|
71
|
-
## Test Scenarios
|
72
|
-
|
73
|
-
### Positive Tests
|
74
|
-
|
75
|
-
These tests verify that valid configurations work correctly:
|
76
|
-
|
77
|
-
1. **Basic HTTP Tests**
|
78
|
-
- Health endpoint access
|
79
|
-
- Echo command execution
|
80
|
-
- Security command access
|
81
|
-
|
82
|
-
2. **HTTP + Token Tests**
|
83
|
-
- Authentication with valid API key
|
84
|
-
- Role-based access control
|
85
|
-
- Rate limiting validation
|
86
|
-
|
87
|
-
3. **HTTPS Tests**
|
88
|
-
- SSL/TLS handshake
|
89
|
-
- Certificate validation
|
90
|
-
- Secure communication
|
91
|
-
|
92
|
-
4. **HTTPS + Token Tests**
|
93
|
-
- Combined SSL and token authentication
|
94
|
-
- Security headers validation
|
95
|
-
- Mixed authentication methods
|
96
|
-
|
97
|
-
5. **mTLS Tests**
|
98
|
-
- Mutual certificate authentication
|
99
|
-
- Certificate chain validation
|
100
|
-
- Role extraction from certificates
|
101
|
-
|
102
|
-
### Negative Tests
|
103
|
-
|
104
|
-
These tests verify that invalid configurations are properly rejected:
|
105
|
-
|
106
|
-
1. **Invalid API Key**
|
107
|
-
- Test with wrong API key
|
108
|
-
- Expected: Authentication failure
|
109
|
-
|
110
|
-
2. **No Authentication on Auth Server**
|
111
|
-
- Test without credentials on auth-required server
|
112
|
-
- Expected: Access denied
|
113
|
-
|
114
|
-
3. **Protocol Mismatch**
|
115
|
-
- HTTP client connecting to HTTPS server
|
116
|
-
- Expected: Connection failure
|
117
|
-
|
118
|
-
4. **Invalid Certificates**
|
119
|
-
- Expired certificates
|
120
|
-
- Wrong organization certificates
|
121
|
-
- Expected: Certificate validation failure
|
122
|
-
|
123
|
-
### Certificate Tests
|
124
|
-
|
125
|
-
Specific tests for certificate-based authentication:
|
126
|
-
|
127
|
-
1. **Admin Certificate**
|
128
|
-
- Full administrative access
|
129
|
-
- Expected: All operations allowed
|
130
|
-
|
131
|
-
2. **User Certificate**
|
132
|
-
- Standard user access
|
133
|
-
- Expected: Read/write operations allowed
|
134
|
-
|
135
|
-
3. **Readonly Certificate**
|
136
|
-
- Read-only access
|
137
|
-
- Expected: Only read operations allowed
|
138
|
-
|
139
|
-
4. **Expired Certificate**
|
140
|
-
- Certificate past expiration date
|
141
|
-
- Expected: Authentication failure
|
142
|
-
|
143
|
-
5. **Wrong Organization Certificate**
|
144
|
-
- Certificate from unauthorized organization
|
145
|
-
- Expected: Authentication failure
|
146
|
-
|
147
|
-
## Usage
|
148
|
-
|
149
|
-
### Prerequisites
|
150
|
-
|
151
|
-
1. Install dependencies:
|
152
|
-
```bash
|
153
|
-
pip install mcp_security_framework aiohttp
|
154
|
-
```
|
155
|
-
|
156
|
-
2. Generate certificates (if not already present):
|
157
|
-
```bash
|
158
|
-
python examples/generate_certificates.py
|
159
|
-
```
|
160
|
-
|
161
|
-
### Running Tests
|
162
|
-
|
163
|
-
#### Run All Tests
|
164
|
-
```bash
|
165
|
-
python examples/run_security_tests.py
|
166
|
-
```
|
167
|
-
|
168
|
-
#### Run Specific Test Types
|
169
|
-
```bash
|
170
|
-
# Positive tests only
|
171
|
-
python examples/run_security_tests.py --positive-only
|
172
|
-
|
173
|
-
# Negative tests only
|
174
|
-
python examples/run_security_tests.py --negative-only
|
175
|
-
|
176
|
-
# Certificate tests only
|
177
|
-
python examples/run_security_tests.py --certificates-only
|
178
|
-
```
|
179
|
-
|
180
|
-
#### Run with Custom Certificate Directory
|
181
|
-
```bash
|
182
|
-
python examples/run_security_tests.py --cert-dir ./certs
|
183
|
-
```
|
184
|
-
|
185
|
-
#### Save Results to File
|
186
|
-
```bash
|
187
|
-
python examples/run_security_tests.py --output test_results.json
|
188
|
-
```
|
189
|
-
|
190
|
-
### Using the Security Test Client
|
191
|
-
|
192
|
-
The security test client can be used independently:
|
193
|
-
|
194
|
-
```bash
|
195
|
-
# Test basic HTTP
|
196
|
-
python examples/security_test_client.py --server-url http://localhost:8000
|
197
|
-
|
198
|
-
# Test HTTPS with certificates
|
199
|
-
python examples/security_test_client.py --server-url https://localhost:8443 --cert-dir ./certs
|
200
|
-
|
201
|
-
# Test with specific API key
|
202
|
-
python examples/security_test_client.py --server-url http://localhost:8001 --api-key test-api-key
|
203
|
-
```
|
204
|
-
|
205
|
-
## Test Client Features
|
206
|
-
|
207
|
-
The `SecurityTestClient` provides:
|
208
|
-
|
209
|
-
### Authentication Methods
|
210
|
-
- **None**: No authentication
|
211
|
-
- **API Key**: Token-based authentication
|
212
|
-
- **Certificate**: mTLS certificate authentication
|
213
|
-
|
214
|
-
### SSL/TLS Support
|
215
|
-
- SSL context creation
|
216
|
-
- Certificate validation
|
217
|
-
- Hostname verification
|
218
|
-
- TLS version configuration
|
219
|
-
|
220
|
-
### Test Endpoints
|
221
|
-
- **Health Check**: `/health`
|
222
|
-
- **Echo Command**: `/cmd` (JSON-RPC)
|
223
|
-
- **Security Command**: `/cmd` (JSON-RPC)
|
224
|
-
|
225
|
-
### Error Handling
|
226
|
-
- Connection timeout handling
|
227
|
-
- SSL/TLS error detection
|
228
|
-
- Authentication failure detection
|
229
|
-
- Detailed error reporting
|
230
|
-
|
231
|
-
## Security Features Tested
|
232
|
-
|
233
|
-
### 1. SSL/TLS Security
|
234
|
-
- Certificate validation
|
235
|
-
- TLS version enforcement
|
236
|
-
- Cipher suite selection
|
237
|
-
- Hostname verification
|
238
|
-
|
239
|
-
### 2. Authentication
|
240
|
-
- API key validation
|
241
|
-
- Certificate-based authentication
|
242
|
-
- Role extraction from certificates
|
243
|
-
- Permission checking
|
244
|
-
|
245
|
-
### 3. Authorization
|
246
|
-
- Role-based access control
|
247
|
-
- Permission inheritance
|
248
|
-
- Resource-level permissions
|
249
|
-
- Admin privilege validation
|
250
|
-
|
251
|
-
### 4. Rate Limiting
|
252
|
-
- Request rate enforcement
|
253
|
-
- Burst limit validation
|
254
|
-
- Role-based exemptions
|
255
|
-
- Time window management
|
256
|
-
|
257
|
-
### 5. Security Headers
|
258
|
-
- Content-Type-Options
|
259
|
-
- Frame-Options
|
260
|
-
- XSS-Protection
|
261
|
-
- HSTS (HTTP Strict Transport Security)
|
262
|
-
|
263
|
-
### 6. Certificate Management
|
264
|
-
- Certificate expiration checking
|
265
|
-
- Certificate revocation list (CRL)
|
266
|
-
- Certificate chain validation
|
267
|
-
- Organization validation
|
268
|
-
|
269
|
-
## Expected Test Results
|
270
|
-
|
271
|
-
### Positive Tests
|
272
|
-
All positive tests should:
|
273
|
-
- ✅ Successfully connect to server
|
274
|
-
- ✅ Authenticate properly
|
275
|
-
- ✅ Execute commands successfully
|
276
|
-
- ✅ Return expected responses
|
277
|
-
- ✅ Complete within reasonable time
|
278
|
-
|
279
|
-
### Negative Tests
|
280
|
-
All negative tests should:
|
281
|
-
- ❌ Fail to authenticate
|
282
|
-
- ❌ Return appropriate error codes
|
283
|
-
- ❌ Log security violations
|
284
|
-
- ❌ Prevent unauthorized access
|
285
|
-
- ❌ Handle errors gracefully
|
286
|
-
|
287
|
-
### Certificate Tests
|
288
|
-
Certificate tests should:
|
289
|
-
- ✅ Accept valid certificates
|
290
|
-
- ❌ Reject expired certificates
|
291
|
-
- ❌ Reject wrong organization certificates
|
292
|
-
- ✅ Extract roles correctly
|
293
|
-
- ✅ Enforce role-based permissions
|
294
|
-
|
295
|
-
## Troubleshooting
|
296
|
-
|
297
|
-
### Common Issues
|
298
|
-
|
299
|
-
1. **Certificate Not Found**
|
300
|
-
```
|
301
|
-
Error: Certificate files not found
|
302
|
-
Solution: Run generate_certificates.py first
|
303
|
-
```
|
304
|
-
|
305
|
-
2. **Port Already in Use**
|
306
|
-
```
|
307
|
-
Error: Address already in use
|
308
|
-
Solution: Stop existing servers or change ports in config
|
309
|
-
```
|
310
|
-
|
311
|
-
3. **SSL Handshake Failed**
|
312
|
-
```
|
313
|
-
Error: SSL handshake failed
|
314
|
-
Solution: Check certificate validity and CA certificate
|
315
|
-
```
|
316
|
-
|
317
|
-
4. **Authentication Failed**
|
318
|
-
```
|
319
|
-
Error: Authentication failed
|
320
|
-
Solution: Verify API key or certificate configuration
|
321
|
-
```
|
322
|
-
|
323
|
-
### Debug Mode
|
324
|
-
|
325
|
-
Enable debug logging for detailed troubleshooting:
|
326
|
-
|
327
|
-
```bash
|
328
|
-
# Set debug environment variable
|
329
|
-
export DEBUG=1
|
330
|
-
|
331
|
-
# Run tests with verbose output
|
332
|
-
python examples/run_security_tests.py --verbose
|
333
|
-
```
|
334
|
-
|
335
|
-
### Certificate Validation
|
336
|
-
|
337
|
-
To validate certificates manually:
|
338
|
-
|
339
|
-
```bash
|
340
|
-
# Check certificate validity
|
341
|
-
openssl x509 -in certs/admin.crt -text -noout
|
342
|
-
|
343
|
-
# Verify certificate chain
|
344
|
-
openssl verify -CAfile certs/ca_cert.pem certs/admin.crt
|
345
|
-
|
346
|
-
# Check certificate expiration
|
347
|
-
openssl x509 -in certs/admin.crt -noout -dates
|
348
|
-
```
|
349
|
-
|
350
|
-
## Integration with CI/CD
|
351
|
-
|
352
|
-
The security testing framework can be integrated into CI/CD pipelines:
|
353
|
-
|
354
|
-
```yaml
|
355
|
-
# Example GitHub Actions workflow
|
356
|
-
name: Security Tests
|
357
|
-
on: [push, pull_request]
|
358
|
-
|
359
|
-
jobs:
|
360
|
-
security-tests:
|
361
|
-
runs-on: ubuntu-latest
|
362
|
-
steps:
|
363
|
-
- uses: actions/checkout@v2
|
364
|
-
- name: Set up Python
|
365
|
-
uses: actions/setup-python@v2
|
366
|
-
with:
|
367
|
-
python-version: '3.12'
|
368
|
-
- name: Install dependencies
|
369
|
-
run: |
|
370
|
-
pip install -e .
|
371
|
-
pip install mcp_security_framework aiohttp
|
372
|
-
- name: Generate certificates
|
373
|
-
run: python examples/generate_certificates.py
|
374
|
-
- name: Run security tests
|
375
|
-
run: python examples/run_security_tests.py --output results.json
|
376
|
-
- name: Upload test results
|
377
|
-
uses: actions/upload-artifact@v2
|
378
|
-
with:
|
379
|
-
name: security-test-results
|
380
|
-
path: results.json
|
381
|
-
```
|
382
|
-
|
383
|
-
## Performance Considerations
|
384
|
-
|
385
|
-
### Test Execution Time
|
386
|
-
- **Basic HTTP**: ~1-2 seconds per test
|
387
|
-
- **HTTPS**: ~2-3 seconds per test
|
388
|
-
- **mTLS**: ~3-5 seconds per test
|
389
|
-
- **Full Test Suite**: ~30-60 seconds
|
390
|
-
|
391
|
-
### Resource Usage
|
392
|
-
- **Memory**: ~50-100 MB per server instance
|
393
|
-
- **CPU**: Low usage during normal operation
|
394
|
-
- **Network**: Minimal traffic for test scenarios
|
395
|
-
|
396
|
-
### Optimization Tips
|
397
|
-
1. Run tests in parallel (with different ports)
|
398
|
-
2. Use connection pooling for multiple requests
|
399
|
-
3. Implement test result caching
|
400
|
-
4. Use lightweight certificates for testing
|
401
|
-
|
402
|
-
## Security Best Practices
|
403
|
-
|
404
|
-
### For Testing
|
405
|
-
1. Use dedicated test certificates
|
406
|
-
2. Never use production certificates in tests
|
407
|
-
3. Implement proper cleanup after tests
|
408
|
-
4. Validate all security headers
|
409
|
-
5. Test both positive and negative scenarios
|
410
|
-
|
411
|
-
### For Production
|
412
|
-
1. Use strong certificate authorities
|
413
|
-
2. Implement certificate rotation
|
414
|
-
3. Monitor certificate expiration
|
415
|
-
4. Use secure cipher suites
|
416
|
-
5. Enable security headers
|
417
|
-
6. Implement rate limiting
|
418
|
-
7. Log security events
|
419
|
-
|
420
|
-
## Contributing
|
421
|
-
|
422
|
-
When adding new security tests:
|
423
|
-
|
424
|
-
1. **Follow Naming Convention**
|
425
|
-
- Test files: `test_<feature>_<scenario>.py`
|
426
|
-
- Config files: `config_<type>_<auth>.json`
|
427
|
-
|
428
|
-
2. **Include Both Positive and Negative Tests**
|
429
|
-
- Test valid configurations
|
430
|
-
- Test invalid configurations
|
431
|
-
- Verify error handling
|
432
|
-
|
433
|
-
3. **Document Test Scenarios**
|
434
|
-
- Describe expected behavior
|
435
|
-
- Document test prerequisites
|
436
|
-
- Include troubleshooting steps
|
437
|
-
|
438
|
-
4. **Update This Documentation**
|
439
|
-
- Add new test scenarios
|
440
|
-
- Update usage examples
|
441
|
-
- Document new features
|
442
|
-
|
443
|
-
## Support
|
444
|
-
|
445
|
-
For issues and questions:
|
446
|
-
|
447
|
-
1. Check the troubleshooting section
|
448
|
-
2. Review test logs for detailed error messages
|
449
|
-
3. Verify certificate and configuration files
|
450
|
-
4. Test with minimal configuration first
|
451
|
-
5. Contact the development team
|
452
|
-
|
453
|
-
## License
|
454
|
-
|
455
|
-
This security testing framework is part of the MCP Proxy Adapter project and follows the same license terms.
|