The SSL handshake does not work for Internet Explorer 6. IE6 uses SSL 3.0, which is
supported by crypto/tls. The problem seems to be that IE6 sends an empty Session ID in
it's client hello message. The unmarshal() function for clientHelloMsg in
crypto/tls/handshake_messages.go fails. (I will continue investigating if I get a
I attached a minimal example HTTPS server in Go, and a shell script to generate the key
& self-signed certificate.
IE6, by default, will send SSLv2 compat handshakes which Go doesn't support. You can
change this under "Tools", "Internet Options...", "Advanced", (scroll to the bottom),
uncheck "Use SSL 2.0" and check "Use SSL 3.0" and "Use TLS 1.0".
On a wider note: if you're running a secure, production server with Go then terminating
the SSL connections with something else is probably a good idea. The Go TLS stack has
been substantially written by me and hasn't received any of the security review that
something like OpenSSL has. OpenSSL and the like will also use less CPU and include all
the quirks needed to support browsers like IE6.