Monday, July 4, 2011

JSON and SSL in groovy, how to ignore certificates

In the last couple of days I became more and more interested in bitmining and the first thing I noticed was the utter lack of integrated tools and hence statistics I would like to associated with my miners.

This resulted in me creating a tiny grails application to synchronzie my deepbit statistics with the current market data from mtgox to calculate at which point it becomes pointless to mine these thing. I basically hope that this pays for the 700$ for my 2x6950 radeons and associated cooling the 100+F heat we have here in California.

Now originally you could assume that this is rather straightforward. After all you got json data, which just need to be parsed.

Map jsonArray = JSON.parse(new InputStreamReader(new URL("").openStream()))

println jsonArray

but sadly the java ssl security manager does not agree here with us and tosses a fit.. PKIX path building failed: unable to find valid certification path to requested target

Now java is kinda smart, if want's to force you install a security certificate from the server you access and authorize yourself. But sometimes you don't want this. In this case it's overkill, since we are having a readonly transaction.

So what has to be done?

you need to create your own security manager implementation. Which basically is a 3 step procedure

  1. implement an interface

    class TrustManager implements X509TrustManager {

    public[] getAcceptedIssuers() {
    return null;

    public void checkClientTrusted([] certs, String authType) {

    public void checkServerTrusted([] certs, String authType) {


  2. register the interface and update the context configuration

    TrustManager[] trustAllCerts = new TrustManager[1]

    trustAllCerts[0] = new TrustManager()
    try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new;
    } catch (Exception e) {

  3. and continue like always with your json script

    Map jsonArray = JSON.parse(new InputStreamReader(new URL("").openStream()))

and the result should be now the current ticker for the USD to BitCoin exchange rate.


    1 comment: