<< Light reading received | Home | The easy way to loop an XPage managed bean >>

Using the IBM Connections API from other languages using custom certificates

I was reading up on some stuff in the IBM Connections REST API during the weekend and came across a post titled Using IBM Connections API in different programming languages on how to use the REST API from other languages than JavaScript from within IBM Connections. The approach there is very nice and quite valid but it fails to mention what to do if the SSL certificate of the API endpoint either isn't trusted or isn't certified using a "known" root certificate. In this case "known" means to the Java runtime you're using or the runtime of any other language for that matter. Here I'm only dealing with Java though.

By default the java.net classes will not allow a SSL connections to a server using a unknown/untrusted certificate but there are ways around that. Of course the best is always to make sure that the certificate of the server may be validated by the Java keystore (including intermediate certificates) but for testing - or if you know what you're doing - simply ignoring the certificate test can be beneficial. Below is some code showing how to configure the SSL runtime to ignore the certificate and hostname checks. The code is a static configuration method and I deem it pretty readable. The code allows *all* certificates but could pretty easily be locked down to be more restrictive if need be.

private void enableSelfSignedCerts() throws Throwable {
  TrustManager[] trustAllCerts = new TrustManager[] { 
    new X509TrustManager() {
      public java.security.cert.X509Certificate[] 
        getAcceptedIssuers() {
        return null;
      }
      public void checkClientTrusted(X509Certificate[] certs,
          String authType) {
      }
      public void checkServerTrusted(X509Certificate[] certs,
        String authType) {
      }
    }
 };

 SSLContext sc = SSLContext.getInstance("SSL");
 sc.init(null, 
         trustAllCerts, 
         new java.security.SecureRandom());
  HttpsURLConnection.
    setDefaultSSLSocketFactory(sc.getSocketFactory());

  // Create all-trusting host name verifier
  HostnameVerifier allHostsValid = new HostnameVerifier() {
    public boolean verify(String hostname, 
      SSLSession session) {
      return true;
    }
  };
  
  // Install the all-trusting host verifier
  HttpsURLConnection
    .setDefaultHostnameVerifier(allHostsValid);
}



Avatar: Colas M

Re: Using the IBM Connections API from other languages using custom certificates

Hi,

If you use Apache Abdera to manage IBM Connections API from XPages application (like me) ... 

The method registerTrustManager() does the job ... 

AbderaClient.registerTrustManager();

 


Add a comment Send a TrackBack