add reference ssl echo server using websockets and nginx reverse proxy to terminate ssl
This commit is contained in:
		
							
								
								
									
										3
									
								
								test/compatibility/python/websockets/Procfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/compatibility/python/websockets/Procfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | nginx: nginx -p . -c nginx.conf | ||||||
|  | websocket_server: python echo_server.py | ||||||
|  | send: sleep 1 ; ws send -x --verify_none wss://localhost:8765 /usr/local/bin/ws | ||||||
| @@ -5,18 +5,15 @@ | |||||||
| import asyncio | import asyncio | ||||||
| import websockets | import websockets | ||||||
|  |  | ||||||
| async def hello(websocket, path): |  | ||||||
|     await websocket.send(f"> Welcome !") |  | ||||||
|  |  | ||||||
|     name = await websocket.recv() | async def echo(websocket, path): | ||||||
|     print(f"< {name}") |     msg = await websocket.recv() | ||||||
|  |     print(f'Received {len(msg)} bytes') | ||||||
|  |     await websocket.send(msg) | ||||||
|  |  | ||||||
|     greeting = f"Hello {name}!" |  | ||||||
|  |  | ||||||
|     await websocket.send(greeting) | print('Serving on localhost:8766') | ||||||
|     print(f"> {greeting}") | start_server = websockets.serve(echo, 'localhost', 8766, max_size=2 ** 25) | ||||||
|  |  | ||||||
| start_server = websockets.serve(hello, 'localhost', 8765) |  | ||||||
|  |  | ||||||
| asyncio.get_event_loop().run_until_complete(start_server) | asyncio.get_event_loop().run_until_complete(start_server) | ||||||
| asyncio.get_event_loop().run_forever() | asyncio.get_event_loop().run_forever() | ||||||
|   | |||||||
| @@ -0,0 +1,28 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  |  | ||||||
|  | # WS server example | ||||||
|  |  | ||||||
|  | import asyncio | ||||||
|  | import websockets | ||||||
|  |  | ||||||
|  | async def hello(websocket, path): | ||||||
|  |     await websocket.send(f"> Welcome !") | ||||||
|  |  | ||||||
|  |     name = await websocket.recv() | ||||||
|  |     print(f"< {name}") | ||||||
|  |  | ||||||
|  |     greeting = f"Hello {name}!" | ||||||
|  |  | ||||||
|  |     await websocket.send(greeting) | ||||||
|  |     print(f"> {greeting}") | ||||||
|  |  | ||||||
|  | async def echo(websocket, path): | ||||||
|  |     msg = await websocket.recv() | ||||||
|  |     print(f'Received {len(msg)} bytes') | ||||||
|  |     await websocket.send(msg) | ||||||
|  |  | ||||||
|  | print('Serving on localhost:8766') | ||||||
|  | start_server = websockets.serve(echo, 'localhost', 8766) | ||||||
|  |  | ||||||
|  | asyncio.get_event_loop().run_until_complete(start_server) | ||||||
|  | asyncio.get_event_loop().run_forever() | ||||||
| @@ -1,3 +1,6 @@ | |||||||
|  | all: | ||||||
|  | 	honcho start # install honcho (pip install honcho) or procman (the original ruby script) | ||||||
|  |  | ||||||
| .PHONY: docker | .PHONY: docker | ||||||
|  |  | ||||||
| NAME   := bsergean/ws_proxy | NAME   := bsergean/ws_proxy | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								test/compatibility/python/websockets/nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								test/compatibility/python/websockets/nginx.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  |  | ||||||
|  | error_log stderr warn; | ||||||
|  |  | ||||||
|  | daemon off; | ||||||
|  |  | ||||||
|  | events { | ||||||
|  |     worker_connections 32; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | http { | ||||||
|  |  | ||||||
|  |     map $http_upgrade $connection_upgrade { | ||||||
|  |         default upgrade; | ||||||
|  |         '' close; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     upstream websocket { | ||||||
|  |         server localhost:8766; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     server { | ||||||
|  |         listen 8765 ssl; | ||||||
|  |  | ||||||
|  |         ssl_certificate     trusted-client-crt.pem; | ||||||
|  |         ssl_certificate_key trusted-client-key.pem; | ||||||
|  |         ssl_protocols       TLSv1 TLSv1.1 TLSv1.2; | ||||||
|  |         ssl_ciphers         HIGH:!aNULL:!MD5; | ||||||
|  |  | ||||||
|  |         location / { | ||||||
|  |             proxy_pass http://websocket; | ||||||
|  |             proxy_http_version 1.1; | ||||||
|  |             proxy_set_header Upgrade $http_upgrade; | ||||||
|  |             proxy_set_header Connection $connection_upgrade; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								test/compatibility/python/websockets/trusted-client-crt.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								test/compatibility/python/websockets/trusted-client-crt.pem
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | -----BEGIN CERTIFICATE----- | ||||||
|  | MIIDLDCCAhSgAwIBAgIJALyEpMxNH62gMA0GCSqGSIb3DQEBCwUAMEExFDASBgNV | ||||||
|  | BAoMC21hY2hpbmV6b25lMRQwEgYDVQQKDAtJWFdlYlNvY2tldDETMBEGA1UEAwwK | ||||||
|  | dHJ1c3RlZC1jYTAeFw0xOTEyMjQwMDM3MzVaFw0yMDEyMjMwMDM3MzVaMEUxFDAS | ||||||
|  | BgNVBAoMC21hY2hpbmV6b25lMRQwEgYDVQQKDAtJWFdlYlNvY2tldDEXMBUGA1UE | ||||||
|  | AwwOdHJ1c3RlZC1jbGllbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB | ||||||
|  | AQDFCipQ6OIJX15n2okHxuSkviuzcHzoYEzPhF6QXzKFbKhuzp4g0mMOXPvDKQE+ | ||||||
|  | +dycGm6l1yg1pUuNKNxYjDWcSqOIqvDaOv9DkJCCNXpAGbh1CUmGdmp4HvwrzSIn | ||||||
|  | +3s/enC+zatcnwhrOyJk8k/9VqKlt+vB1++UAQV1eSX7adb/BemoyMguAQ8edAls | ||||||
|  | IiVSRrHRRyHy98j97jxX5lIdoC1FMv7Tj4suJA7wvTHlq3clpLL8t6dw1DAmBybK | ||||||
|  | ShUg9SC/T07WJ2cOo8wka+p7S/blh8qZwIy7kTgCI+SYgRfEOA94u9A9mDqp295h | ||||||
|  | DCghN2UdU3hh1k7SChI/owLpAgMBAAGjIzAhMB8GA1UdEQQYMBaCCWxvY2FsaG9z | ||||||
|  | dIIJMTI3LjAuMC4xMA0GCSqGSIb3DQEBCwUAA4IBAQAtsbBGLUxABNH5yoRbk0o3 | ||||||
|  | sGFMVkNDKkCE24BVkUfNyKUxLQWMknw3B4bmhrC8ZQPRk069ERV0ZR6eB2/9EG9s | ||||||
|  | Pzy4JbMwWrP5c0UIMJRk3w8ev9FXrsKwG6VhIPnvAdbJEis+7eDmYgpvmsbsYRmG | ||||||
|  | cqJcWvDKffki52Gbr9WgxLpqCGc2XMGr1Y1jU73Y4zmOeNLiU6HRKimNtGjqx/Tx | ||||||
|  | QoGVTNwki4TQTwQIyJ+HOj0c49IDJ93GbW5aymOT/e1IXDe07e9yg1r80bdFn23X | ||||||
|  | 9bmRagT1/qu8lXfOpQA0foYeSJRSN7gITPmo7G2ogGVr6dZwhAHDYYy2pwW32j7o | ||||||
|  | -----END CERTIFICATE----- | ||||||
							
								
								
									
										27
									
								
								test/compatibility/python/websockets/trusted-client-key.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								test/compatibility/python/websockets/trusted-client-key.pem
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | -----BEGIN RSA PRIVATE KEY----- | ||||||
|  | MIIEpAIBAAKCAQEAxQoqUOjiCV9eZ9qJB8bkpL4rs3B86GBMz4RekF8yhWyobs6e | ||||||
|  | INJjDlz7wykBPvncnBpupdcoNaVLjSjcWIw1nEqjiKrw2jr/Q5CQgjV6QBm4dQlJ | ||||||
|  | hnZqeB78K80iJ/t7P3pwvs2rXJ8IazsiZPJP/VaipbfrwdfvlAEFdXkl+2nW/wXp | ||||||
|  | qMjILgEPHnQJbCIlUkax0Uch8vfI/e48V+ZSHaAtRTL+04+LLiQO8L0x5at3JaSy | ||||||
|  | /LencNQwJgcmykoVIPUgv09O1idnDqPMJGvqe0v25YfKmcCMu5E4AiPkmIEXxDgP | ||||||
|  | eLvQPZg6qdveYQwoITdlHVN4YdZO0goSP6MC6QIDAQABAoIBAGMCJ58+Vg5FmKdw | ||||||
|  | vThmLY/GaykgVfNiKFaB+g5rd3Rp0/zR3804SkP2Xx+CpDijzsG12nGEupSyOVN1 | ||||||
|  | +7qWwX2GV8QduSa/THMD2klDW+mHwxM0Fnj1WayATVApJIeYqyaLfMmziO7ijpVr | ||||||
|  | Qm4dACqZdOL2lwVxXtYs6TRNKtO4SIzmeVS39hmV2zeGmhUzI4hbirLOWBtbsPpl | ||||||
|  | qi5wyVkHoEVLnY376TOFc8u5+636yh6G2yqa/zsv9BBXG77DKWl659Fsd4DaUcRG | ||||||
|  | sk6CTH+I99aE0wrzSUuQmDR/IflxT+DP2ceNrCIc1h1oFzrBKh3fpFR3+D6SSGMn | ||||||
|  | r9Nk7LECgYEA/8CHrh2LLjqsLbqBoMUXthPwPrVGlK+KGb14+S8Pbfa2hDFWhoif | ||||||
|  | /FBWAD7GSXedjL3kxFSfmFxsDGPSyqqLRuZNaNs8Ar7vage6FYT6Vfh/8TYOToNr | ||||||
|  | 8AHmhgQCg4luC8VGedCeEDVmUgkdJd/baoY8r3LKXaqsLxyBQN1Hzi0CgYEAxTsQ | ||||||
|  | jMFwACIdZHJKgUAdEA6PJM0HCS45F4116yqum99S4H10O1VdWK/vKeb13PK//25X | ||||||
|  | liXhjNHqcVLX08meqs561nKBWhbA72UU3oBAF4RNLHkbZMh1HtZGfBCfJ/Kmq12/ | ||||||
|  | ZmGCwggUHhwnKD02hIGdffc+0eLTeCQL8HKi+S0CgYEA59+MpAXRHDbByCviPvqy | ||||||
|  | hrgJBzGfLksAsFmihnluScp2q993jT3tnvrPHiXL7OvwAZxg/seicqbIp2sRwAFj | ||||||
|  | iQJgiILMI8kskzsyMTSBKtTEWtMhoXlxsQZoFHUqOkutZCqVvPexdwyTGil9LcuJ | ||||||
|  | yUivWHqAku+ccJItdbup0HkCgYEAswkZzdvucoCFU+AX19o+R4wfzpU7FM9bzhCA | ||||||
|  | gTgehqojzlqzfwTPlqkmHlBk0Oue9BzS7x5172HCQpqkBsGYAY8rnK0W1JOhEe8d | ||||||
|  | EZk0FOTpNTy+bC83egWiuA5Sm22+dALGswZDLyUsNeTyeqmOapxKPcWJxfb0ZbO7 | ||||||
|  | DsrRPAUCgYAzJm79VvEeRtwKhm0AcDSikJgNKojm6T6BIi/9QJyMTYlvGpBEwPBt | ||||||
|  | iqmqCqXGmUYafFApTUPyzmyDUsLfeHRwylvPn4UtYXPJ1UKGCVY3SWiJQi2CHSvC | ||||||
|  | gGSIifjzyeSjhw1cqzS2jHfu4lu6p2GBv/fyXLRVS7x6xY7OBinmvg== | ||||||
|  | -----END RSA PRIVATE KEY----- | ||||||
		Reference in New Issue
	
	Block a user