Outgoing Secure Socket Connection
We showed you how to make an Outgoing HTTP Request. If you would like to make a secure connection you need only add a single line of code.
dataSocket.setSecure(true);
Here I will securely connect from my development JNIOR to the external HoneyPot JNIOR. From the example in the other topic I have modified the host and the request to attempt to access the JNIOR.
package jtest;
import com.integpg.system.Debug;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws Exception {
// Location services
String serverHostname = "50.197.34.75";
int port = 443;
// Establish a Socket, get streams, and set a timeout
Socket dataSocket = new Socket(serverHostname, port);
DataOutputStream sockout = new DataOutputStream(dataSocket.getOutputStream());
DataInputStream sockin = new DataInputStream(dataSocket.getInputStream());
dataSocket.setSoTimeout(5000);
// Negotiate a secure connection
dataSocket.setSecure(true);
// Issue the HTTP request
sockout.writeBytes("GET / HTTP/1.1\r\n");
sockout.writeBytes("Host: " + serverHostname + "\r\n");
sockout.writeBytes("\r\n");
// Process the response header
int length = 0;
String response;
while ((response = sockin.readLine()) != null) {
// Header ends with blank line
if (response.length() == 0)
break;
System.out.println(response);
if (response.startsWith("Content-Length: "))
length = Integer.parseInt(response.substring(16));
}
System.out.println();
// Obtain the entire response (if any)
response = "";
if (length > 2) {
byte[] resp = new byte[length];
sockin.readFully(resp);
response = new String(resp, "UTF8");
}
// Data (should be JSON)
Debug.dump(response.getBytes());
// Close the Socket
sockout.close();
sockin.close();
dataSocket.close();
}
}
bruce_dev /> jtest HTTP/1.1 401 Unauthorized WWW-Authenticate: Digest realm="JANOS Web Server", qop=auth, nonce="66d0bb430469f01e9153358cfa7f" Content-Length: 99 3c 48 54 4d 4c 3e 3c 48-45 41 44 3e 3c 54 49 54 <HTML><H EAD><TIT 4c 45 3e 34 30 31 20 55-6e 61 75 74 68 6f 72 69 LE>401.U nauthori 7a 65 64 3c 2f 54 49 54-4c 45 3e 0d 0a 3c 2f 48 zed</TIT LE>..</H 45 41 44 3e 3c 42 4f 44-59 3e 3c 68 31 3e 34 30 EAD><BOD Y><h1>40 31 20 55 6e 61 75 74 68-6f 72 69 7a 65 64 3c 2f 1.Unauth orized</ 68 31 3e 3c 2f 42 4f 44-59 3e 3c 2f 48 54 4d 4c h1></BOD Y></HTML 3e 0d 0a >.. bruce_dev />
So we get the response expected. But was it done securely? Here’s the transaction from the Wireshark point of view.
By Bruce Cloutier | Updated On November 3, 2023 2:26 pm | No Comments | Categories: Embedded Programming, Java Code Samples | Tags: ethernet, java, networking, secure, sockets