-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AuTest suite defaults to TLSv1.0? #288
Comments
Thanks for your interest in the project. Just to make sure we're in sync, are you interacting with Proxy Verifier on current master at the moment?
Oh, about point 1: perhaps I misunderstood. You're not discussing a production proxy negotiating TLS 1.0, you're saying that the test proxy is negotiating TLS 1.0. Is that it? If that is the case, we can investigate what can be done to increase that version negotiated by the test proxy. |
Yeah, its possible I misinterpreted what this tool is supposed to do. I was hoping to use the test suite, since it already contains a bunch of the tests that we'd need to implement to validate our production proxy anyways. As far as the TLS handshake negotiation, I was running a verifier client using the replay files from one of the simple HTTP tests while directing it to connect to our production proxy. I was surprised to see that that the client attempts to connect first with TLSv1.0, which we don't support (which generates a 400 back from our proxy). I would have assumed the verifier client would have picked the system minimum version, which is 1.2 on mine. So does this mean that the TLS version is somehow controlled by the test replay file (the yaml), or is this negotiation integral to the client? |
Right. There is some potential confusion in terminology and concepts, so let me try to be helpful and make things explicit:
Having said that:
Concerning the above, this concerns Proxy Verifier not its autest. In theory this is all handled by OpenSSL via TLS_client_method. Proxy Verifier doesn't implement its own TLS negotiation. I can look into this further. |
Yes, I had noticed the use of the |
I believe that { 3, 1 } version is for backwards compatibility with older servers. The client advertises the version it supports in the client hello via the version in the handshake, which your screenshot just misses, but the bytes are visible 6 later after the highlighted As an aside, are you using the prebuilt binaries? If you are building proxy verifier from source, are you building with the libraries installed via tools/build_library_dependencies.sh? |
It replies with a 400 HTTP response? That would imply that it completed the handshake. So the server negotiated some TLS version. What version do you see in the SERVER_HELLO? That will indicate the version that the client and server agreed upon. Here's an example from my packet capture showing TLS 1.2 negotiation: |
@Rwardc : any update on this? Have you been able to see what TLS version the client and server are negotiating in the handshake? |
So in the example I posted, there's no server hello coming back, just the 400 response. I'm not sure why that's happening, but I assume its something to do with our proxy server. On a somewhat related note, I'm trying my hand at writing some yaml for our tests, but the errors returned for bad nodes are cryptic at best:
Do you have a validation tool you use, or is there a way to increase the verbosity of the error output? I'm trying to create a "minimally viable" test file to get my feet wet, and I'm probably making a simple mistake somewhere. Here are the file contents:
|
By 400 response, I assume you mean an HTTP 400 response. If that is the case, then that can only happen after TLS is negotiated. You demonstrated that you have a tcpdump for the handshake. Please look at the SERVER_HELLO per my example above (see my screenshot) and you should be able to see what TLS version it negotiated.
This is a Proxy Verifier bug. It's not supposed to be this cryptic. You are exposing a crash while parsing the file. In any case, looking at your file, there are two issues:
This diff to your file should get your replay file parsing and working: $ diff /tmp/old /tmp/new
10c10
< client-request:
---
> - client-request:
17a18
> - [ uuid, first-transaction ]
In general I just massage the files until Proxy Verifier is happy parsing it. Thank you again for your interest in this project. |
Thanks for pointing this out. I filed #289 for this and fixed with #290 . This is now landed in the master branch and will be in the next release. In the meantime, the abort can be avoided by making the transaction elements in Thank you again for the feedback. |
You know what...thinking about this further, it actually seems like your proxy has disabled TLS support in general, at least for that port. Not just for TLS 1.0. It seems to expect a plaintext HTTP request, gets a TLS CLIENT_HELLO, considers it garbled HTTP bytes, and replies with an HTTP 400 response because it considers the request malformed. That being the case, you can either configure Proxy Verifier to talk plain HTTP (no TLS) to the proxy, or configure the proxy to expect TLS on the listening port. |
I'm trying to leverage the test suite from this project to test a local http proxy project, but I have some questions:
The text was updated successfully, but these errors were encountered: