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