There is a new scenario that brings up several of the points discussed in this thread previously.
One is related to curl, the other related to tlsv1.3
First, I was using curl and found that curl will interpret a '#' as the start of a new URL. I have found others who have identified this same issue with curl using other special characters. In this case, the URL is truncated and curl fails.
Heading
The precise problem is using nonconforming characters to extend the URL name. Web developers are adding data after the ".html". My encounter is with the
---------.html#<date>
.
As entered, curl will truncate the URL at the #. If I encode it -------.html%23<date>
, then paste the encoded URL into the website via a browser, it encodes the encoded characters again with results in "no page found."
Web developers are attaching data to URLs so instead of sending a new webpage each time a user requests a table change (frequently a table) the webpage can be updated by sending just the table data via JSON and not the entire webpage.
I don't see getting curl changed anytime soon. Thus, using OpenSSL to bring up URLs is necessary if such features are to be tested.
I was able to find an unsecure website that happens to use # in the server paths. I tested this using OpenSSL and it completed successfully.
echo -e "GET /#/Methods HTTP/1.1\r\nHost: eu.httpbin.org\r\nConnection: Close\r\n\r\n" | openssl s_client -quiet -state -connect eu.httpbin.org:443
Therefore, it can conclude that OpenSSL does not treat '#'
as a special character in a URL. Curl parses input as HTML where '#'
is a special character related to a HTML anchor.
The second issue, which is somewhat related to the initial topic, is using this same OpenSSL technique with tlsv1.3. There are no errors reported by OpenSSL, but it stops after the second "read R Block."
echo -e "GET / HTTP/1.1\r\nHost: cmegroup.com\r\nConnection: Close\r\n\r\n" | openssl 2>&1 s_client -CAfile firefoxCertBundle.pem -cert privClientCrt.pem -key privClient.key -tls1_3 -ciphersuites TLS_AES_256_GCM_SHA384 -quiet -state -connect cmegroup.com:443
SSL_connect:before SSL initialization
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS read server hello
SSL_connect:TLSv1.3 read encrypted extensions
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global
Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = Illinois, L = Chicago, O = Chicago Mercantile Exchange Inc,
CN = www.cmegroup.com
verify return:1
SSL_connect:SSLv3/TLS read server certificate
SSL_connect:TLSv1.3 read server certificate verify
SSL_connect:SSLv3/TLS read finished
SSL_connect:SSLv3/TLS write change cipher spec
SSL_connect:SSLv3/TLS write finished
SSL_connect:SSL negotiation finished successfully
SSL_connect:SSL negotiation finished successfully
SSL_connect:SSLv3/TLS read server session ticket
SSL_connect:SSL negotiation finished successfully
SSL_connect:SSL negotiation finished successfully
SSL_connect:SSLv3/TLS read server session ticket