-
-
Notifications
You must be signed in to change notification settings - Fork 99
Description
I'm encountering an issue with CherryPy's built-in SSL adapter where it seems to cause port contention with netcat. When I run a CherryPy server with SSL enabled using the built-in adapter, and establish a TCP connection using netcat nc localhost 8080 without performing TLS handshake, not able to access the application via browser or any other client until I complete the TLS handshake in netcat. However, if I switch to using PyOpenSSL, able to access the application via other clients while TLS handshake is not yet done in TCP connection via netcat.
I'm not sure why the built-in SSL adapter is causing this behavior, but it seems to be related to how it manages SSL connections or handles socket bindings.
Has anyone encountered a similar issue with CherryPy's built-in SSL adapter? Any insights or suggestions on how to resolve or further debug this issue would be greatly appreciated.
Thank you!
β I'm submitting a ...
- π bug report
- π£ feature request
- β question about the decisions made in the repository
π Describe the bug. What is the current behavior?
Here's a summary of the setup and behavior:
- I have a CherryPy application configured to use SSL with the built-in adapter.
- When I start the CherryPy server, it binds to the specified port with SSL enabled.
- Access the URL
https://localhost:8080/in browser, returns"Hello, world!" - Execute
nc localhost 8080in a terminal - Access the URL
https://localhost:8080/again in browser, it hangs. - Terminate
ctrl+cthenccommand in terminal,"Hello, world!"is returned in the browser. - But if change to
cherrypy.server.ssl_module = 'pyopenssl', with TCP connection established using nc, able to access the URL in the browser and other clients.
Please provide the steps to reproduce and if possible a screenshots and logs of the problem. If you can, show us your code.
class YourApp:
@cherrypy.expose
def index(self):
return "Hello, world!"
if __name__ == '__main__':
# Configuration
cherrypy.config.update({
'server.thread_pool': 10, # Number of threads in the pool
'server.socket_host': '0.0.0.0', # Bind to all interfaces
'server.socket_port': 8080, # Port to listen on
'server.socket_timeout': 60
})
cherrypy.server.ssl_module = 'builtin' # Use the built-in SSL module
cherrypy.server.ssl_certificate = 'cert.pem' # Path to your SSL certificate
cherrypy.server.ssl_private_key = 'key.pem'
cherrypy.quickstart(YourApp(), '/')π‘ Expected behavior
App should server requests even if a connection handshake is in progress
π Details
π Environment
- Cheroot version: 10.0.1
- CherryPy version: 18.9.0
- Python version: 3.11
- OS: MacOs 14.1
- Browser: all
π Additional context