56

I'm working on a homework assignment for my college course. The task is to fetch web pages on HTTPS using nc (netcat).

To fetch a page over HTTP, I can simply do the following:

cat request.txt | nc -w 5 <someserver> 80

In request.txt I have an HTTP 1.1 request

GET / HTTP/1.1
Host: <someserver>

Now... This works perfectly fine. The challenge is, however - to fetch a web page that uses HTTPS?

I get a page certificate like this. And this is the point at which I'm currently stuck

openssl s_client -connect <someserver>:443
4
  • socat - OPENSSL would work, but that's probably not your assignment.
    – Tobu
    Jan 12, 2010 at 21:19
  • s/collage/college/, s/witch/which/ Dec 20, 2012 at 8:39
  • 1
    You can use bash redirection to avoid using cat, i.e. nc -w 5 <someserver> 80 < request.txt.
    – RastaJedi
    Aug 3, 2016 at 5:39
  • See What's the alternative to “nc -l” for HTTPS? for the other way around.
    – Nickolay
    Aug 12, 2019 at 2:27

4 Answers 4

80

nc doesn't do https. openssl s_client is as close as you'll get. Do something like this:

$ cat request.txt | openssl s_client -connect server:443
3
  • 4
    I mean, unless your assignment is to write some code that does the SSL. That would be StackOverflow territory :)
    – Bill Weiss
    Jan 12, 2010 at 20:44
  • 13
    I've tried this, but I do not get what the server send back to me in stdout... Feb 17, 2015 at 22:24
  • Add -ign_eof to also retrieve the response. May 20, 2021 at 10:47
54

ncat --ssl

On Ubuntu:

sudo apt-get install nmap
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | ncat --ssl github.com 443

Same as on Super User Can the telnet or netcat clients communicate over SSL? but nmap uses ncat with nc (e.g., nc --ssl).

On Debian or Ubuntu:

sudo apt-get install ncat
7
  • is there any way to take your command and pass username and password commands into it for https sites that require authentication?
    – user53029
    Mar 16, 2016 at 12:52
  • @user53029 I think not for most websites, where authentication works by filling a form and giving you a session cookies. Unless it is one of the very few websites that uses other methods of authentication like en.wikipedia.org/wiki/Basic_access_authentication. You could also manually fill the form, and then send the cookie while it is valid. Or if you are desperate use stackoverflow.com/questions/13376189/… Mar 16, 2016 at 12:58
  • ncat is not nc, ncat does not support keep connection on send the payload like as nc. The question require a objetive response using nc not others apps.
    – e-info128
    Apr 25, 2018 at 11:56
  • 2
    @e-info128 thanks for that info. My philosophy is: when I google for something, and I click on this page, will I find the answer that I want. Apr 25, 2018 at 12:30
  • what is sudo apt-get install nmap?? May 20, 2019 at 1:50
8

You probably want to use stunnel.

A GNU program allowing to encrypt arbitrary TCP connections inside Secure Sockets Layer (SSL).

http://www.stunnel.org

It's very UNIX-y. One great tool for one simple task.

1
  • 1
    stunnel + nc would work, I suppose. Good thought.
    – Bill Weiss
    Jan 13, 2010 at 15:56
3

Ask the prof or TA for assistance. You would never try to do HTTPS over netcat in the real world (openssl s_client would be my first-line tool of choice, but there are other options) so the chances of finding the "right" answer that the prof wants by asking people in the real world is low. I'd probably go over all the slides/notes from the lectures; typically these sorts of "impossible" questions are actually answered in the lectures, and asked just to see who is actually paying attention in class.

Not the answer you're looking for? Browse other questions tagged or ask your own question.