open a connection to which SSL-enabled server
Following along with
http://java.sun.com/developer/technicalArticles/Security/secureinternet2/
I believe that I imported the requisite certs:
thufir@arrakis:~$
thufir@arrakis:~$ keytool -genkey -keystore serverkeys -keyalg rsa -alias
qusay
Enter key store password: password
Enter key password for <qusay>: password
You are about to enter information that will be incorporated into
your certificate request. This information is what is called a
Distinguished Name or DN. There are quite a few fields but you
can use supplied default values, displayed between brackets, by just
hitting <Enter>, or blank the field by entering the <.> character
before hitting <Enter>.
Common Name (hostname, IP, or your name): Thufir
Organization Name (company) [The Sample Company]: Atreides
Organizational Unit Name (department, division): Arrakis
Locality Name (city, district) [Sydney]: Arakeen
State or Province Name (full name) [NSW]: Arakeen
Country Name (2 letter code) [AU]: US
thufir@arrakis:~$
thufir@arrakis:~$ keytool -export -keystore serverkeys -alias qusay -file
server.cert
Enter key store password: password
thufir@arrakis:~$
thufir@arrakis:~$ keytool -import -keystore trustedcerts -alias qusay -
file
server.cert
Enter key store password: password
Owner: CN=Thufir,O=Atreides,OU=Arrakis,L=Arakeen,ST=Arakeen,C=US
Issuer: CN=Thufir,O=Atreides,OU=Arrakis,L=Arakeen,ST=Arakeen,C=US
Serial number: 1
Valid from: Monday May 11, 2009 AD - 12:03:00;561 o'clock AM GMT-07:00
until: Sunday August 9, 2009 AD - 12:03:00;561 o'clock AM GMT-07:00
Certificate fingerprints
MD5: B0:A7:25:73:AB:7E:9E:0B:D0:77:DA:7F:96:CF:3B:92
SHA-160: AE:D0:55:85:BF:CF:A0:1B:E0:23:24:C9:8A:AE:A4:C7:6F:0B:26:87
Can this certificate be trusted? (yes or no) [No] y
Certificate was added to the key store
thufir@arrakis:~$
thufir@arrakis:~$
However, I'm not quite sure that I'm getting the correct output. When
the resulting JAR is run from the command line (some) of the output is:
thufir@arrakis:~$
thufir@arrakis:~$
thufir@arrakis:~$ java -jar NetBeansProjects/rest/dist/rest.jar
HTTP/1.1 301 Moved Permanently
Date: Mon, 11 May 2009 07:14:49 GMT
Server: Apache
Set-Cookie: cwrClyrK4LoCV1fydGbAxiNL6iG=%
7c9-4kYRQAxuincRZtHDXAqi_Iql_rTpylpXqXov2fL2F7KlfcMgL990RuiNteIZUBCkAi1m%
7cxtw_vtXgwTHjRXxG9_A2A_bUqMksdoPKV2R7_SDG5JWKafOE8gXQLAjIPkZ0FVzPb7kIiG%
7c; domain=.paypal.com; path=/
Set-Cookie: Apache=10.190.9.14.1242026089349717; path=/; expires=Sun, 29-
Mar-03 00:46:33 GMT
Location: https://www.paypal.com/ca/cgi-bin/webscr?
cmd=_home&country_lang.x=true
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
**************
HTTP/1.1 403 Forbidden
Date: Mon, 11 May 2009 07:14:50 GMT
Server: Apache/2.0.52 (Fedora)
Last-Modified: Thu, 11 Nov 2004 15:38:45 GMT
ETag: "1056db-f5b-5e9d2b40"
Accept-Ranges: bytes
Content-Length: 3931
Connection: close
However, I'm not sure whether that's the "correct" output or not. Is
there a good URL to try to connect to? Everything works fine for
HttpConnection, I'm just working on HttpsConnection.
code:
thufir@arrakis:~$
thufir@arrakis:~$
thufir@arrakis:~$ cat NetBeansProjects/rest/src/rest/Rest.java
package rest;
//imports omitted
public class Rest {
private static final String DNA = "http://xml.nig.ac.jp/rest/Invoke";
private static final String SUN = "www.sun.com";
private static final String JAM = "www.jam.ca";
private static final String PAY = "www.paypal.com";;
private static final int HTTPS_PORT = 443;
public static void main(String[] args) throws IOException {
out.println(readHttpsURL(PAY));
out.println("\n\n**************\n\n");
out.println(readHttpsURL(JAM));
}
public static String readHttpsURL(String stringURL) throws
IOException {
//there's another version, v2, in the tutorial
// Get a Socket factory
SocketFactory factory = SSLSocketFactory.getDefault();
// Get Socket from factory
Socket socket = factory.createSocket(stringURL, HTTPS_PORT);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter
(socket.getOutputStream()));
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out.write("GET / HTTP/1.0\n\n");
out.flush();
String line;
StringBuffer sb = new StringBuffer();
while ((line = in.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
out.close();
in.close();
return sb.toString();
}
}
thufir@arrakis:~$
thanks,
Thufir