changeset 14:698158e7b691

merge
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 15 Apr 2016 12:00:36 +0200
parents ca2ee69520eb (current diff) 4c6bba5f44e7 (diff)
children 8842da72186a
files
diffstat 1 files changed, 84 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/com/orthancserver/HttpsTrustModifier.java	Fri Apr 15 12:00:36 2016 +0200
@@ -0,0 +1,84 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+package com.orthancserver;
+
+import java.net.*;
+import javax.net.ssl.*;
+import java.security.*;
+import java.security.cert.*;
+
+public class HttpsTrustModifier 
+{
+  private static final AlwaysTrustHostname trustHostname_ = new AlwaysTrustHostname();
+  private static SSLSocketFactory trustSocket_;
+
+  private static synchronized SSLSocketFactory GetAlwaysTrustSocket(HttpsURLConnection httpsConnection)
+    throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException 
+  {
+    // Singleton pattern to create one single trust manager
+    if (trustSocket_ == null) 
+    {
+      SSLContext ctx = SSLContext.getInstance("TLS");
+      ctx.init(null, new TrustManager[] { new AlwaysTrustManager() }, null);
+      trustSocket_ = ctx.getSocketFactory();
+    }
+
+    return trustSocket_;
+  }
+
+
+  private static final class AlwaysTrustHostname implements HostnameVerifier
+  {
+    public boolean verify(String hostname, SSLSession session)
+    {
+      return true;
+    }
+  }
+
+
+  private static class AlwaysTrustManager implements X509TrustManager 
+  {
+    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
+    {
+    }
+
+    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
+    {
+    }
+
+    public X509Certificate[] getAcceptedIssuers()
+    { 
+      return null; 
+    }
+  }
+
+
+  public static void Trust(URLConnection conn)
+    throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException 
+  {
+    if (conn instanceof HttpsURLConnection) 
+    {
+      HttpsURLConnection httpsConnection = (HttpsURLConnection) conn;
+      httpsConnection.setSSLSocketFactory(GetAlwaysTrustSocket(httpsConnection));
+      httpsConnection.setHostnameVerifier(trustHostname_);
+    }
+  }
+}