mcp-proxy-adapter 6.1.1__py3-none-any.whl → 6.2.1__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.
Files changed (146) hide show
  1. mcp_proxy_adapter/__main__.py +27 -7
  2. mcp_proxy_adapter/api/app.py +18 -7
  3. mcp_proxy_adapter/commands/ssl_setup_command.py +234 -351
  4. mcp_proxy_adapter/core/app_factory.py +87 -3
  5. mcp_proxy_adapter/core/app_runner.py +272 -0
  6. mcp_proxy_adapter/core/certificate_utils.py +291 -73
  7. mcp_proxy_adapter/core/client.py +574 -0
  8. mcp_proxy_adapter/core/client_manager.py +284 -0
  9. mcp_proxy_adapter/core/server_adapter.py +17 -80
  10. mcp_proxy_adapter/core/server_engine.py +5 -99
  11. mcp_proxy_adapter/core/ssl_utils.py +13 -12
  12. mcp_proxy_adapter/core/transport_manager.py +5 -5
  13. mcp_proxy_adapter/examples/__init__.py +16 -0
  14. mcp_proxy_adapter/examples/basic_framework/__init__.py +7 -0
  15. mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +4 -0
  16. mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +4 -0
  17. mcp_proxy_adapter/examples/basic_framework/main.py +21 -40
  18. mcp_proxy_adapter/examples/commands/__init__.py +5 -1
  19. mcp_proxy_adapter/examples/create_certificates_simple.py +260 -75
  20. mcp_proxy_adapter/examples/debug_request_state.py +4 -36
  21. mcp_proxy_adapter/examples/debug_role_chain.py +2 -49
  22. mcp_proxy_adapter/examples/demo_client.py +0 -66
  23. mcp_proxy_adapter/examples/full_application/__init__.py +11 -0
  24. mcp_proxy_adapter/examples/full_application/commands/__init__.py +7 -0
  25. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +0 -19
  26. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +0 -16
  27. mcp_proxy_adapter/examples/full_application/hooks/__init__.py +7 -0
  28. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +0 -22
  29. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +0 -24
  30. mcp_proxy_adapter/examples/full_application/main.py +65 -44
  31. mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +154 -0
  32. mcp_proxy_adapter/examples/generate_all_certificates.py +0 -67
  33. mcp_proxy_adapter/examples/generate_certificates.py +0 -15
  34. mcp_proxy_adapter/examples/generate_certificates_and_tokens.py +369 -0
  35. mcp_proxy_adapter/examples/generate_test_configs.py +204 -0
  36. mcp_proxy_adapter/examples/proxy_registration_example.py +3 -70
  37. mcp_proxy_adapter/examples/run_example.py +1 -23
  38. mcp_proxy_adapter/examples/run_security_tests.py +2 -60
  39. mcp_proxy_adapter/examples/run_security_tests_fixed.py +0 -53
  40. mcp_proxy_adapter/examples/security_test_client.py +18 -123
  41. mcp_proxy_adapter/examples/setup_test_environment.py +179 -0
  42. mcp_proxy_adapter/examples/test_config.py +148 -0
  43. mcp_proxy_adapter/examples/test_config_generator.py +1 -25
  44. mcp_proxy_adapter/examples/test_examples.py +4 -67
  45. mcp_proxy_adapter/examples/universal_client.py +154 -162
  46. mcp_proxy_adapter/main.py +51 -161
  47. mcp_proxy_adapter/version.py +1 -1
  48. mcp_proxy_adapter-6.2.1.dist-info/METADATA +676 -0
  49. mcp_proxy_adapter-6.2.1.dist-info/RECORD +119 -0
  50. mcp_proxy_adapter/docs/EN/TROUBLESHOOTING.md +0 -285
  51. mcp_proxy_adapter/docs/RU/TROUBLESHOOTING.md +0 -285
  52. mcp_proxy_adapter/examples/README.md +0 -257
  53. mcp_proxy_adapter/examples/README_EN.md +0 -258
  54. mcp_proxy_adapter/examples/SECURITY_TESTING.md +0 -455
  55. mcp_proxy_adapter/examples/basic_framework/configs/http_auth.json +0 -37
  56. mcp_proxy_adapter/examples/basic_framework/configs/http_simple.json +0 -23
  57. mcp_proxy_adapter/examples/basic_framework/configs/https_auth.json +0 -43
  58. mcp_proxy_adapter/examples/basic_framework/configs/https_no_protocol_middleware.json +0 -36
  59. mcp_proxy_adapter/examples/basic_framework/configs/https_simple.json +0 -29
  60. mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_protocol_middleware.json +0 -34
  61. mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_roles.json +0 -39
  62. mcp_proxy_adapter/examples/basic_framework/configs/mtls_simple.json +0 -35
  63. mcp_proxy_adapter/examples/basic_framework/configs/mtls_with_roles.json +0 -45
  64. mcp_proxy_adapter/examples/basic_framework/roles.json +0 -21
  65. mcp_proxy_adapter/examples/cert_config.json +0 -9
  66. mcp_proxy_adapter/examples/certs/admin.crt +0 -32
  67. mcp_proxy_adapter/examples/certs/admin.key +0 -52
  68. mcp_proxy_adapter/examples/certs/admin_cert.pem +0 -21
  69. mcp_proxy_adapter/examples/certs/admin_key.pem +0 -28
  70. mcp_proxy_adapter/examples/certs/ca_cert.pem +0 -23
  71. mcp_proxy_adapter/examples/certs/ca_cert.srl +0 -1
  72. mcp_proxy_adapter/examples/certs/ca_key.pem +0 -28
  73. mcp_proxy_adapter/examples/certs/cert_config.json +0 -9
  74. mcp_proxy_adapter/examples/certs/client.crt +0 -32
  75. mcp_proxy_adapter/examples/certs/client.key +0 -52
  76. mcp_proxy_adapter/examples/certs/client_admin.crt +0 -32
  77. mcp_proxy_adapter/examples/certs/client_admin.key +0 -52
  78. mcp_proxy_adapter/examples/certs/client_user.crt +0 -32
  79. mcp_proxy_adapter/examples/certs/client_user.key +0 -52
  80. mcp_proxy_adapter/examples/certs/guest_cert.pem +0 -21
  81. mcp_proxy_adapter/examples/certs/guest_key.pem +0 -28
  82. mcp_proxy_adapter/examples/certs/mcp_proxy_adapter_ca_ca.crt +0 -23
  83. mcp_proxy_adapter/examples/certs/proxy_cert.pem +0 -21
  84. mcp_proxy_adapter/examples/certs/proxy_key.pem +0 -28
  85. mcp_proxy_adapter/examples/certs/readonly.crt +0 -32
  86. mcp_proxy_adapter/examples/certs/readonly.key +0 -52
  87. mcp_proxy_adapter/examples/certs/readonly_cert.pem +0 -21
  88. mcp_proxy_adapter/examples/certs/readonly_key.pem +0 -28
  89. mcp_proxy_adapter/examples/certs/server.crt +0 -32
  90. mcp_proxy_adapter/examples/certs/server.key +0 -52
  91. mcp_proxy_adapter/examples/certs/server_cert.pem +0 -32
  92. mcp_proxy_adapter/examples/certs/server_key.pem +0 -52
  93. mcp_proxy_adapter/examples/certs/test_ca_ca.crt +0 -20
  94. mcp_proxy_adapter/examples/certs/user.crt +0 -32
  95. mcp_proxy_adapter/examples/certs/user.key +0 -52
  96. mcp_proxy_adapter/examples/certs/user_cert.pem +0 -21
  97. mcp_proxy_adapter/examples/certs/user_key.pem +0 -28
  98. mcp_proxy_adapter/examples/client_configs/api_key_client.json +0 -13
  99. mcp_proxy_adapter/examples/client_configs/basic_auth_client.json +0 -13
  100. mcp_proxy_adapter/examples/client_configs/certificate_client.json +0 -22
  101. mcp_proxy_adapter/examples/client_configs/jwt_client.json +0 -15
  102. mcp_proxy_adapter/examples/client_configs/no_auth_client.json +0 -9
  103. mcp_proxy_adapter/examples/full_application/configs/http_auth.json +0 -37
  104. mcp_proxy_adapter/examples/full_application/configs/http_simple.json +0 -23
  105. mcp_proxy_adapter/examples/full_application/configs/https_auth.json +0 -39
  106. mcp_proxy_adapter/examples/full_application/configs/https_simple.json +0 -25
  107. mcp_proxy_adapter/examples/full_application/configs/mtls_no_roles.json +0 -39
  108. mcp_proxy_adapter/examples/full_application/configs/mtls_with_roles.json +0 -45
  109. mcp_proxy_adapter/examples/full_application/roles.json +0 -21
  110. mcp_proxy_adapter/examples/keys/ca_key.pem +0 -28
  111. mcp_proxy_adapter/examples/keys/mcp_proxy_adapter_ca_ca.key +0 -28
  112. mcp_proxy_adapter/examples/keys/test_ca_ca.key +0 -28
  113. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log +0 -220
  114. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.1 +0 -1
  115. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.2 +0 -1
  116. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.3 +0 -1
  117. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.4 +0 -1
  118. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.5 +0 -1
  119. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log +0 -220
  120. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.1 +0 -1
  121. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.2 +0 -1
  122. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.3 +0 -1
  123. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.4 +0 -1
  124. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.5 +0 -1
  125. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log +0 -2
  126. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.1 +0 -1
  127. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.2 +0 -1
  128. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.3 +0 -1
  129. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.4 +0 -1
  130. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.5 +0 -1
  131. mcp_proxy_adapter/examples/roles.json +0 -38
  132. mcp_proxy_adapter/examples/server_configs/config_basic_http.json +0 -204
  133. mcp_proxy_adapter/examples/server_configs/config_http_token.json +0 -238
  134. mcp_proxy_adapter/examples/server_configs/config_https.json +0 -215
  135. mcp_proxy_adapter/examples/server_configs/config_https_token.json +0 -231
  136. mcp_proxy_adapter/examples/server_configs/config_mtls.json +0 -215
  137. mcp_proxy_adapter/examples/server_configs/config_proxy_registration.json +0 -250
  138. mcp_proxy_adapter/examples/server_configs/config_simple.json +0 -46
  139. mcp_proxy_adapter/examples/server_configs/roles.json +0 -38
  140. mcp_proxy_adapter/utils/config_generator.py +0 -727
  141. mcp_proxy_adapter-6.1.1.dist-info/METADATA +0 -205
  142. mcp_proxy_adapter-6.1.1.dist-info/RECORD +0 -197
  143. mcp_proxy_adapter-6.1.1.dist-info/entry_points.txt +0 -2
  144. mcp_proxy_adapter-6.1.1.dist-info/licenses/LICENSE +0 -21
  145. {mcp_proxy_adapter-6.1.1.dist-info → mcp_proxy_adapter-6.2.1.dist-info}/WHEEL +0 -0
  146. {mcp_proxy_adapter-6.1.1.dist-info → mcp_proxy_adapter-6.2.1.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.