From 8327c29f036ebcc93bc3f3616756c67bb36b7341 Mon Sep 17 00:00:00 2001 From: Anuj Bhandar Date: Mon, 17 Apr 2017 17:38:33 -0400 Subject: [PATCH 1/4] boiler plate code for keycloak admin client --- jssecacerts | Bin 0 -> 114936 bytes modules/commons/pom.xml | 5 + modules/user-profile-migration/pom.xml | 27 ++- .../KeycloakIdentityServerClient.java | 88 ++++++++ .../org/apache/airavata/MigrationManager.java | 12 +- ...AO.java => Wso2ISLoginCredentialsDAO.java} | 4 +- ...ent.java => Wso2IdentityServerClient.java} | 2 +- .../InstallCert$SavingTrustManager.class | Bin 0 -> 1164 bytes .../apache/airavata/utils/InstallCert.class | Bin 0 -> 5947 bytes .../apache/airavata/utils/InstallCert.java | 192 ++++++++++++++++++ .../apache/airavata/utils/iamscigaporg.cer | Bin 0 -> 1411 bytes 11 files changed, 318 insertions(+), 12 deletions(-) create mode 100644 jssecacerts create mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java rename modules/user-profile-migration/src/main/java/org/apache/airavata/{ISLoginCredentialsDAO.java => Wso2ISLoginCredentialsDAO.java} (94%) rename modules/user-profile-migration/src/main/java/org/apache/airavata/{IdentityServerClient.java => Wso2IdentityServerClient.java} (99%) create mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert$SavingTrustManager.class create mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.class create mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java create mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/iamscigaporg.cer diff --git a/jssecacerts b/jssecacerts new file mode 100644 index 0000000000000000000000000000000000000000..8b1b7836be76b6a87db606774bdc9fc4bf3be687 GIT binary patch literal 114936 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 zx3yo4z&UL$?logback-classic ${logback.version} + + org.apache.airavata + airavata-commons + 0.17-SNAPSHOT + diff --git a/modules/user-profile-migration/pom.xml b/modules/user-profile-migration/pom.xml index 1ef677e804..2171c8fb65 100644 --- a/modules/user-profile-migration/pom.xml +++ b/modules/user-profile-migration/pom.xml @@ -60,11 +60,13 @@ commons-httpclient 3.1 + org.apache.httpcomponents httpclient - 4.0.1 + 4.5.3 + org.wso2.carbon org.wso2.carbon.um.ws.api.stub @@ -91,8 +93,27 @@ airavata-data-models ${project.version} + + + javax.ws.rs + javax.ws.rs-api + 2.0.1 + + + + org.jboss.resteasy + resteasy-client + 3.1.2.Final + + + + org.keycloak + keycloak-admin-client + 3.0.0.Final + + src/main/java @@ -102,8 +123,8 @@ true 2.0 - 1.6 - 1.6 + 1.8 + 1.8 diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java new file mode 100644 index 0000000000..940e9dbfaa --- /dev/null +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java @@ -0,0 +1,88 @@ +package org.apache.airavata; + +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +import org.keycloak.admin.client.Keycloak; +import org.keycloak.representations.idm.CredentialRepresentation; +import org.keycloak.representations.idm.UserRepresentation; + +import java.util.Arrays; + +public class KeycloakIdentityServerClient { + + public void setAdminUserName(String adminUserName) { + adminUserName = adminUserName; + } + + public void setAdminUserPassword(String adminUserPassword) { + this.adminUserPassword = adminUserPassword; + } + + public void setRealm(String realm) { + this.realm = realm; + } + + public void setAdminUrl(String adminUrl) { + this.adminUrl = adminUrl; + } + + private String adminUrl; + private String realm; + private String adminUserName; + private String adminUserPassword; + private Keycloak client; + + public KeycloakIdentityServerClient(String adminUrl, String realm, String adminUserName, String adminUserPassword) { + this.adminUrl = adminUrl; + this.realm = realm; + this.adminUserName = adminUserName; + this.adminUserPassword = adminUserPassword; + this.client = Keycloak.getInstance( + this.adminUrl, + this.realm, // the realm to log in to + this.adminUserName, this.adminUserPassword, // the user + "security-admin-console"); + } + + boolean createUser(){ + + CredentialRepresentation credential = new CredentialRepresentation(); + credential.setType(CredentialRepresentation.PASSWORD); + credential.setValue("test123"); + UserRepresentation user = new UserRepresentation(); + user.setUsername("testuser"); + user.setFirstName("Test"); + user.setLastName("User"); + user.setCredentials(Arrays.asList(credential)); + this.client.realm(this.realm).users().create(user); + return true; + } + + public static void main(String[] args){ + KeycloakIdentityServerClient client = new KeycloakIdentityServerClient("https://iam.scigap.org/auth", + "accord.scigap.org", + "AccordAdmin", + "Accord@123"); + client.createUser(); + } + +} diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java index 2f5af701df..5ce33d1dc7 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java @@ -33,21 +33,21 @@ public class MigrationManager { - private ArrayList adminCredentials = new ArrayList(); + private ArrayList adminCredentials = new ArrayList(); /*Add the credentials for all the tenants from which the profile should be migrated to Airavata DB*/ public void setISLoginCredentials(){ - adminCredentials.add(new ISLoginCredentialsDAO("prod.seagrid","UserName","Password")); + adminCredentials.add(new Wso2ISLoginCredentialsDAO("prod.seagrid","UserName","Password")); // new credential records here... } /* Method used to fetch all the user profiles from the registered tenants */ - public List getUserProfilesFromIS(){ + public List getUserProfilesFromWso2IS(){ ArrayList userProfileList = new ArrayList(); - for(ISLoginCredentialsDAO creds:adminCredentials){ - RemoteUserStoreManagerServiceStub isClient = IdentityServerClient.getAdminServiceClient(creds.getLoginUserName(),creds.getLoginPassword(),"RemoteUserStoreManagerService"); + for(Wso2ISLoginCredentialsDAO creds:adminCredentials){ + RemoteUserStoreManagerServiceStub isClient = Wso2IdentityServerClient.getAdminServiceClient(creds.getLoginUserName(),creds.getLoginPassword(),"RemoteUserStoreManagerService"); String[] userList; System.out.println("Fetching User Profiles for " + creds.getGateway() + " tenant ..."); try { @@ -127,7 +127,7 @@ private boolean migrateUserProfilesToAiravata(List ISProfileList public static void main(String[] args) { MigrationManager migrationManager = new MigrationManager(); migrationManager.setISLoginCredentials(); - List userProfileList = migrationManager.getUserProfilesFromIS(); + List userProfileList = migrationManager.getUserProfilesFromWso2IS(); try { migrationManager.migrateUserProfilesToAiravata(userProfileList); } catch (TException e) { diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/ISLoginCredentialsDAO.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2ISLoginCredentialsDAO.java similarity index 94% rename from modules/user-profile-migration/src/main/java/org/apache/airavata/ISLoginCredentialsDAO.java rename to modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2ISLoginCredentialsDAO.java index cbc74f16c4..3834fcbb93 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/ISLoginCredentialsDAO.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2ISLoginCredentialsDAO.java @@ -41,7 +41,7 @@ package org.apache.airavata; -public class ISLoginCredentialsDAO { +public class Wso2ISLoginCredentialsDAO { public String getGateway() { return Gateway; } @@ -70,7 +70,7 @@ public void setLoginPassword(String loginPassword) { private String loginUserName; private String loginPassword; - public ISLoginCredentialsDAO(String gateway, String loginUserName, String loginPassword) { + public Wso2ISLoginCredentialsDAO(String gateway, String loginUserName, String loginPassword) { Gateway = gateway; this.loginUserName = loginUserName; this.loginPassword = loginPassword; diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/IdentityServerClient.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java similarity index 99% rename from modules/user-profile-migration/src/main/java/org/apache/airavata/IdentityServerClient.java rename to modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java index 0d1f770d2a..3f5cae77dc 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/IdentityServerClient.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java @@ -51,7 +51,7 @@ */ -public class IdentityServerClient { +public class Wso2IdentityServerClient { /** * Server url of the WSO2 Carbon Server */ diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert$SavingTrustManager.class b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert$SavingTrustManager.class new file mode 100644 index 0000000000000000000000000000000000000000..932d67ad87390628d5f7f68bad0ad87be4888e9d GIT binary patch literal 1164 zcmbVLT~8B16g|@qwk(y8Dt?1iTIq*zYodvYF)@uMBq$F>qw#6F9n0V{ZDwW({vlt~ z1QQ7njK2G$jCU3+s8Jgqc4qd@J?EZtXXfj--Om87qdp1`7kuPUbgPRVF8RoyIEGQo zc_@3h>|vfEW!D*sOKW_CZw5-(z?dj_dZTe`MaRZI1k;mc+ug|dkw(P6k<84A5`G~%iow5*n@yWo`i_cxsy z*;B?tg#;!QT0(D-X4f-U!RI8|m{OzBpo|vZAoS6OGUOMP61o|2V+1+km8G8U2E5OS zF5ptrc~~CARz@aRRL1fsat$v1&b2UXFZ@<7)}eSHU0)}UkY07CpGO|Y@)$=o4AB><=$)icaIK*Clyc3XIZNL-CTMq(RyB&JX!dJ6NY(1wNWZ5) zhN&bgP2(GSa&L+09YqT`et;_yiqURv51D5>$bK21Mw0jzjVCZoS+0u9c3gkT-o{DV z%@F1keRLKFxNC%RxGATM)jl9yzw!|yY5Xd3mu&4(sZWPQlR2Ehd7^UyW@vVDv&6x+ bXtD2bU+ZhCHbb!#W^s;YpLRWza2Eb|p28v0 literal 0 HcmV?d00001 diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.class b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.class new file mode 100644 index 0000000000000000000000000000000000000000..8489c797cc5df1ecd02cd397e0a53ee7475878fa GIT binary patch literal 5947 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 U)phQMA7IyoP|shC2N8$%KYG$qS^xk5 literal 0 HcmV?d00001 diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java new file mode 100644 index 0000000000..13ca144dc0 --- /dev/null +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java @@ -0,0 +1,192 @@ +package org.apache.airavata.utils; + +/** + * Created by anujbhan on 4/17/17. + */ +/* + * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.*; +import java.net.URL; + +import java.security.*; +import java.security.cert.*; + +import javax.net.ssl.*; + +public class InstallCert { + + public static void main(String[] args) throws Exception { + String host; + int port; + char[] passphrase; + if ((args.length == 1) || (args.length == 2)) { + String[] c = args[0].split(":"); + host = c[0]; + port = (c.length == 1) ? 443 : Integer.parseInt(c[1]); + String p = (args.length == 1) ? "changeit" : args[1]; + passphrase = p.toCharArray(); + } else { + System.out.println("Usage: java InstallCert [:port] [passphrase]"); + return; + } + + File file = new File("jssecacerts"); + if (file.isFile() == false) { + char SEP = File.separatorChar; + File dir = new File(System.getProperty("java.home") + SEP + + "lib" + SEP + "security"); + file = new File(dir, "jssecacerts"); + if (file.isFile() == false) { + file = new File(dir, "cacerts"); + } + } + System.out.println("Loading KeyStore " + file + "..."); + InputStream in = new FileInputStream(file); + KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + ks.load(in, passphrase); + in.close(); + + SSLContext context = SSLContext.getInstance("TLS"); + TrustManagerFactory tmf = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(ks); + X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0]; + SavingTrustManager tm = new SavingTrustManager(defaultTrustManager); + context.init(null, new TrustManager[] {tm}, null); + SSLSocketFactory factory = context.getSocketFactory(); + + System.out.println("Opening connection to " + host + ":" + port + "..."); + SSLSocket socket = (SSLSocket)factory.createSocket(host, port); + socket.setSoTimeout(10000); + try { + System.out.println("Starting SSL handshake..."); + socket.startHandshake(); + socket.close(); + System.out.println(); + System.out.println("No errors, certificate is already trusted"); + } catch (SSLException e) { + System.out.println(); + e.printStackTrace(System.out); + } + + X509Certificate[] chain = tm.chain; + if (chain == null) { + System.out.println("Could not obtain server certificate chain"); + return; + } + + BufferedReader reader = + new BufferedReader(new InputStreamReader(System.in)); + + System.out.println(); + System.out.println("Server sent " + chain.length + " certificate(s):"); + System.out.println(); + MessageDigest sha1 = MessageDigest.getInstance("SHA1"); + MessageDigest md5 = MessageDigest.getInstance("MD5"); + for (int i = 0; i < chain.length; i++) { + X509Certificate cert = chain[i]; + System.out.println + (" " + (i + 1) + " Subject " + cert.getSubjectDN()); + System.out.println(" Issuer " + cert.getIssuerDN()); + sha1.update(cert.getEncoded()); + System.out.println(" sha1 " + toHexString(sha1.digest())); + md5.update(cert.getEncoded()); + System.out.println(" md5 " + toHexString(md5.digest())); + System.out.println(); + } + + System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]"); + String line = reader.readLine().trim(); + int k; + try { + k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1; + } catch (NumberFormatException e) { + System.out.println("KeyStore not changed"); + return; + } + + X509Certificate cert = chain[k]; + String alias = host + "-" + (k + 1); + ks.setCertificateEntry(alias, cert); + + OutputStream out = new FileOutputStream("jssecacerts"); + ks.store(out, passphrase); + out.close(); + + System.out.println(); + System.out.println(cert); + System.out.println(); + System.out.println + ("Added certificate to keystore 'jssecacerts' using alias '" + + alias + "'"); + } + + private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray(); + + private static String toHexString(byte[] bytes) { + StringBuffer sb = new StringBuffer(bytes.length * 3); + for(int b = 0;b < bytes.length;b++) { + b &= 0xff; + sb.append(HEXDIGITS[b >> 4]); + sb.append(HEXDIGITS[b & 15]); + sb.append(' '); + } + return sb.toString(); + } + + private static class SavingTrustManager implements X509TrustManager { + + private final X509TrustManager tm; + private X509Certificate[] chain; + + SavingTrustManager(X509TrustManager tm) { + this.tm = tm; + } + + public X509Certificate[] getAcceptedIssuers() { + throw new UnsupportedOperationException(); + } + + public void checkClientTrusted(X509Certificate[] chain, String authType) + throws CertificateException { + throw new UnsupportedOperationException(); + } + + public void checkServerTrusted(X509Certificate[] chain, String authType) + throws CertificateException { + this.chain = chain; + tm.checkServerTrusted(chain, authType); + } + } + +} + diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/iamscigaporg.cer b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/iamscigaporg.cer new file mode 100644 index 0000000000000000000000000000000000000000..3491263414e8627e35f5f298136f7e681fc9dfac GIT binary patch literal 1411 zcmZuxeNYr-9KLsN@8CE%@<5Pyll4QwHv!xHLP z7{eEWFu9pp?yyo;JeP8Cych>tp`H$>@O3}9O+zHw2j>9u%zfN>JQ#Q52c;D^n+NQ-liw1{X z*(;S9BR|OB?wq;bd1_$e@bM?|wGW zx>!jNH#@pVdou+OG~ZNL(OKt?w|KkGm*;K^8D)35QuW6?{o6BZXI8IEdVJ!+Yb}qo z0SSkZnv{*f`Zb{A&KLPRN4no}7B*g<*X29X)Sa?0+qBkkv&E_NAwnPkJ`d>PHqrqV z+`8kGXf%vm8y+w6m2GiuAADooE1$J^zbp|1-<~z5q&OKGiH6^}zjV`PssbLqJ7xZn zz0D0z+zCZc#?OZW@DxRbh^TH%Cvg}bBTz6toQOukaB<)aF%XFYgka(gfp&fvN0-94 zphXnU>=GA-a`%DfzgmCxI^lE<1nasYLf7xV&{1&6O5KT`rVB`rG+tOChN{l<+M%o| z>yHdJi-Sh`-4^Dj>q7jm`)6mFj|M(4Za%(XR`&r55J2 zvGur)*6+S*54ENV6f=8H4o<0BRouC6 z`mHR|w(O!&v{^cIYoIc$tFEDMHT6eTe(S)a`Xt@y*1*$CTP78+x13KYsLdPQ(jzrY z-fmfz*SaA8rG;-=ZW@`|nBLry azQ*UTNKSqDuBztSJrNO~)M|b5aO!U+ecB)Z literal 0 HcmV?d00001 From ec35622d02a970a31dfe47c4b13312665143167d Mon Sep 17 00:00:00 2001 From: Anuj Bhandar Date: Sun, 23 Apr 2017 16:32:54 -0400 Subject: [PATCH 2/4] adding keycloak userstore migrator --- jssecacerts | Bin 114936 -> 0 bytes modules/user-profile-migration/pom.xml | 134 ------------------ .../KeycloakIdentityServerClient.java | 85 +++++------ .../org/apache/airavata/MigrationManager.java | 27 ++-- .../airavata/Wso2IdentityServerClient.java | 36 ++--- .../InstallCert$SavingTrustManager.class | Bin 1164 -> 0 bytes .../apache/airavata/utils/InstallCert.class | Bin 5947 -> 0 bytes .../apache/airavata/utils/InstallCert.java | 6 +- .../apache/airavata/utils/iamscigaporg.cer | Bin 1411 -> 0 bytes 9 files changed, 76 insertions(+), 212 deletions(-) delete mode 100644 jssecacerts delete mode 100644 modules/user-profile-migration/pom.xml delete mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert$SavingTrustManager.class delete mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.class delete mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/iamscigaporg.cer diff --git a/jssecacerts b/jssecacerts deleted file mode 100644 index 8b1b7836be76b6a87db606774bdc9fc4bf3be687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114936 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 - - - - airavata - org.apache.airavata - 0.17-SNAPSHOT - ../../pom.xml - - - 4.0.0 - - user-profile-migration - - - - wso2-maven2-repository - http://dist.wso2.org/maven2 - - - apache-maven2-repo - Apache Maven2 Repository - http://repo1.maven.org/maven2/ - - - - - - org.apache.axis2.wso2 - axis2 - 1.6.1.wso2v1 - - - org.wso2.securevault - org.wso2.securevault - 1.0.0 - - - commons-httpclient - commons-httpclient - 3.1 - - - - org.apache.httpcomponents - httpclient - 4.5.3 - - - - org.wso2.carbon - org.wso2.carbon.um.ws.api.stub - 4.0.2 - - - - mysql - mysql-connector-java - 5.1.6 - - - org.apache.airavata - user-profile-stubs - ${project.version} - - - org.apache.airavata - airavata-commons - 0.17-SNAPSHOT - - - org.apache.airavata - airavata-data-models - ${project.version} - - - - javax.ws.rs - javax.ws.rs-api - 2.0.1 - - - - org.jboss.resteasy - resteasy-client - 3.1.2.Final - - - - org.keycloak - keycloak-admin-client - 3.0.0.Final - - - - - - src/main/java - - - org.apache.maven.plugins - maven-compiler-plugin - true - 2.0 - - 1.8 - 1.8 - - - - - - - \ No newline at end of file diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java index 940e9dbfaa..cd55487dc1 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/KeycloakIdentityServerClient.java @@ -22,67 +22,56 @@ */ import org.keycloak.admin.client.Keycloak; +import org.keycloak.admin.client.resource.UserResource; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.UserRepresentation; -import java.util.Arrays; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.List; public class KeycloakIdentityServerClient { - public void setAdminUserName(String adminUserName) { - adminUserName = adminUserName; - } - - public void setAdminUserPassword(String adminUserPassword) { - this.adminUserPassword = adminUserPassword; - } - - public void setRealm(String realm) { - this.realm = realm; - } - - public void setAdminUrl(String adminUrl) { - this.adminUrl = adminUrl; - } - - private String adminUrl; - private String realm; - private String adminUserName; - private String adminUserPassword; private Keycloak client; public KeycloakIdentityServerClient(String adminUrl, String realm, String adminUserName, String adminUserPassword) { - this.adminUrl = adminUrl; - this.realm = realm; - this.adminUserName = adminUserName; - this.adminUserPassword = adminUserPassword; this.client = Keycloak.getInstance( - this.adminUrl, - this.realm, // the realm to log in to - this.adminUserName, this.adminUserPassword, // the user - "security-admin-console"); + adminUrl, + realm, // the realm to log in to + adminUserName, adminUserPassword, // the user + "admin-cli"); // admin-cli is the client ID used for keycloak admin operations. } - boolean createUser(){ + boolean migrateUserStore(List userProfiles, String targetRealm, String tempPassword){ - CredentialRepresentation credential = new CredentialRepresentation(); - credential.setType(CredentialRepresentation.PASSWORD); - credential.setValue("test123"); - UserRepresentation user = new UserRepresentation(); - user.setUsername("testuser"); - user.setFirstName("Test"); - user.setLastName("User"); - user.setCredentials(Arrays.asList(credential)); - this.client.realm(this.realm).users().create(user); + for(UserProfileDAO userProfile : userProfiles){ + UserRepresentation user = new UserRepresentation(); + user.setUsername(userProfile.getUserName()); + user.setFirstName(userProfile.getFirstName()); + user.setLastName(userProfile.getLastName()); + user.setEmail(userProfile.getEmail()); + user.setEnabled(true); + List requiredActionList = new ArrayList<>(); + requiredActionList.add("UPDATE_PASSWORD"); + user.setRequiredActions(requiredActionList); + Response httpResponse = this.client.realm(targetRealm).users().create(user); + System.out.println(httpResponse.getStatus()); + if(httpResponse.getStatus() == 201){ //HTTP code for record creation: HTTP 201 + List retrieveCreatedUserList = this.client.realm(targetRealm).users().search(user.getUsername(), + user.getFirstName(), + user.getLastName(), + user.getEmail(), + 0,1); + UserResource retirievedUser = this.client.realm(targetRealm).users().get(retrieveCreatedUserList.get(0).getId()); + CredentialRepresentation credential = new CredentialRepresentation(); + credential.setType(CredentialRepresentation.PASSWORD); + credential.setValue(tempPassword); + credential.setTemporary(true); + retirievedUser.resetPassword(credential); + System.out.println("User profile for user " + userProfile.getUserName() + " successfully migrated"); + }else{ return false; } + } return true; } - public static void main(String[] args){ - KeycloakIdentityServerClient client = new KeycloakIdentityServerClient("https://iam.scigap.org/auth", - "accord.scigap.org", - "AccordAdmin", - "Accord@123"); - client.createUser(); - } - -} +} \ No newline at end of file diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java index 5ce33d1dc7..e9df59435f 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/MigrationManager.java @@ -38,7 +38,7 @@ public class MigrationManager { /*Add the credentials for all the tenants from which the profile should be migrated to Airavata DB*/ public void setISLoginCredentials(){ - adminCredentials.add(new Wso2ISLoginCredentialsDAO("prod.seagrid","UserName","Password")); + adminCredentials.add(new Wso2ISLoginCredentialsDAO("prod.seagrid","username","password")); // new credential records here... } @@ -54,13 +54,13 @@ public List getUserProfilesFromWso2IS(){ userList = isClient.getUserList("http://wso2.org/claims/givenname", "*", "default"); System.out.println("FirstName\tLastName\tEmail\t\t\tuserName\tCountry\tOrganization\tphone"); String[] claims = {"http://wso2.org/claims/givenname", - "http://wso2.org/claims/lastname", - "http://wso2.org/claims/emailaddress", - "http://wso2.org/claims/country", - "http://wso2.org/claims/organization", - "http://wso2.org/claims/mobile", - "http://wso2.org/claims/telephone", - "http://wso2.org/claims/streetaddress"}; + "http://wso2.org/claims/lastname", + "http://wso2.org/claims/emailaddress", + "http://wso2.org/claims/country", + "http://wso2.org/claims/organization", + "http://wso2.org/claims/mobile", + "http://wso2.org/claims/telephone", + "http://wso2.org/claims/streetaddress"}; for (String user : userList) { UserProfileDAO userProfile = new UserProfileDAO(); ClaimValue[] retrievedClaimValues = isClient.getUserClaimValuesForClaims(user, claims, null); @@ -124,16 +124,25 @@ private boolean migrateUserProfilesToAiravata(List ISProfileList return false; } + private void migrateUserProfilesToKeycloak(List Wso2ISProfileList){ + KeycloakIdentityServerClient client = new KeycloakIdentityServerClient("https://iam.scigap.org/auth", + "master", + "SuperRealmUsername", + "MasterRealmPassword"); + client.migrateUserStore(Wso2ISProfileList,"keycloakTargetRealm","tempPassword"); + } + public static void main(String[] args) { MigrationManager migrationManager = new MigrationManager(); migrationManager.setISLoginCredentials(); List userProfileList = migrationManager.getUserProfilesFromWso2IS(); try { migrationManager.migrateUserProfilesToAiravata(userProfileList); + migrationManager.migrateUserProfilesToKeycloak(userProfileList); } catch (TException e) { e.printStackTrace(); } catch (ApplicationSettingsException e) { e.printStackTrace(); } } -} +} \ No newline at end of file diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java index 3f5cae77dc..48a6857a43 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/Wso2IdentityServerClient.java @@ -55,7 +55,7 @@ public class Wso2IdentityServerClient { /** * Server url of the WSO2 Carbon Server */ - private static String SEVER_URL = "URL for Identity server"; + private static String SEVER_URL = "https://idp.scigap.org:9443/services/"; public static RemoteUserStoreManagerServiceStub getAdminServiceClient(String adminUserName, String adminPassword, String adminService){ @@ -68,22 +68,22 @@ public static RemoteUserStoreManagerServiceStub getAdminServiceClient(String adm * because the private key and certificate file are not committed to GitHub, * which are needed to run the client */ -// String trustStore = System.getProperty("user.dir") + File.separator + -// "modules" + File.separator + "user-profile-migration" + File.separator + -// "src" + File.separator + "main" + File.separator + -// "resources" + File.separator + "wso2carbon.jks"; -// System.out.println("file path : " + trustStore); -// -// /** -// * Call to https://localhost:9443/services/ uses HTTPS protocol. -// * Therefore we to validate the server certificate or CA chain. The server certificate is looked up in the -// * trust store. -// * Following code sets what trust-store to look for and its JKs password. -// */ -// -// System.setProperty("javax.net.ssl.trustStore", trustStore ); -// -// System.setProperty("javax.net.ssl.trustStorePassword", "wso2carbon"); + String trustStore = System.getProperty("user.dir") + File.separator + + "modules" + File.separator + "user-profile-migration" + File.separator + + "src" + File.separator + "main" + File.separator + + "resources" + File.separator + "wso2carbon.jks"; + System.out.println("file path : " + trustStore); + + /** + * Call to https://localhost:9443/services/ uses HTTPS protocol. + * Therefore we to validate the server certificate or CA chain. The server certificate is looked up in the + * trust store. + * Following code sets what trust-store to look for and its JKs password. + */ + + System.setProperty("javax.net.ssl.trustStore", trustStore ); + + System.setProperty("javax.net.ssl.trustStorePassword", "wso2carbon"); /** * Axis2 configuration context @@ -134,4 +134,4 @@ public static RemoteUserStoreManagerServiceStub getAdminServiceClient(String adm } return null; } -} +} \ No newline at end of file diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert$SavingTrustManager.class b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert$SavingTrustManager.class deleted file mode 100644 index 932d67ad87390628d5f7f68bad0ad87be4888e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1164 zcmbVLT~8B16g|@qwk(y8Dt?1iTIq*zYodvYF)@uMBq$F>qw#6F9n0V{ZDwW({vlt~ z1QQ7njK2G$jCU3+s8Jgqc4qd@J?EZtXXfj--Om87qdp1`7kuPUbgPRVF8RoyIEGQo zc_@3h>|vfEW!D*sOKW_CZw5-(z?dj_dZTe`MaRZI1k;mc+ug|dkw(P6k<84A5`G~%iow5*n@yWo`i_cxsy z*;B?tg#;!QT0(D-X4f-U!RI8|m{OzBpo|vZAoS6OGUOMP61o|2V+1+km8G8U2E5OS zF5ptrc~~CARz@aRRL1fsat$v1&b2UXFZ@<7)}eSHU0)}UkY07CpGO|Y@)$=o4AB><=$)icaIK*Clyc3XIZNL-CTMq(RyB&JX!dJ6NY(1wNWZ5) zhN&bgP2(GSa&L+09YqT`et;_yiqURv51D5>$bK21Mw0jzjVCZoS+0u9c3gkT-o{DV z%@F1keRLKFxNC%RxGATM)jl9yzw!|yY5Xd3mu&4(sZWPQlR2Ehd7^UyW@vVDv&6x+ bXtD2bU+ZhCHbb!#W^s;YpLRWza2Eb|p28v0 diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.class b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.class deleted file mode 100644 index 8489c797cc5df1ecd02cd397e0a53ee7475878fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5947 zcma)A349z?8UKH~o6KZ7X_8G+7}~~42v zYlF(6hzBZ{ibalcNIg)w+(at1cz~dyC@SKG2i|y~c$7l@zL~vp;IF@5^5)HZ-}~PG z{lDXVJ5Rsy=s^IB={yZX_@IgpX}BIYXt)tKskm8QK3s*5;G-&T(eN?sRdB0{k899y zn>4pqadU@)J2lkE@_iZ$-z6`1OLLEkdsTcwy7!6reiffo@hN%#w2IFtxL?C;d{)Ef z@Ofz-kmf-R58+`Ik7)P;avDZ4Ce0V6c~qJM3cjS^F%7LasNl;Yc1W7XReVKMe^tZR z@O1@GXlTciD!w7lr=)pU&hWH~Zz}kfh86g>=y*oOcNBbA!LxGG?`c?#?`v3v=T!Va z#Sc~dNW=5^v5FT|{6xi1HT(=eSMdvZz9`KvW&T$xel5@6Xc)vxDt@ctccSI@!r>pJ z`J;kAsra*sm*tdyQSes{7YdD^!{0Rg-2?ZEihrp1r-D~CnD|!}EBm+f{v*wOD*mhB zu!7eJ!HBs#o*eAYWNl}InKTEj3_??C^Fg({FB1@JL|Tj3)^*ng{wWGk2S92{Sp^7I8AX zVTUZNjyPs?=LR$F$}2dc;B^HFb`Aw^C^)JR6e7<|3i;R+Ot?aRp_u~A13~NA6SdM# zJe9N+svt~rQtPcf-X8AGoh_61W?Bg9%4i~g3@wt%W}?=*xPY$hP1=r`NOV~lXMw=h zF$_Khg&Cbrm82-7>QqG<>xd5Vk*v6*(=^f*s@7>b)ezdxvzf_oNS24n^o3RqrEF*Q zKscSsINL%4X=XS*lre28fgaM zxQV=WX5)#N*sw}w77V3^EuD^|<8?CV1Zifn)e`aTjGeV+GjV4`r&%;xG@r2tX1A3Yr=LC8jZxQ;*q)u)9XqUy72CpFiXRz;i83R5b2_c0 zRl?_LY0hMuMm+Vlm2^TJNag!9+bv;E2$A(`7jfu{_1Ca3Z0KIXfyJ^_p-6W7Wz29$ zp|v`75@(rdp-`yTwzCYF8SkbpoqA}UPG`}2Z<1+T#4ei()!=_W@pU_YY7$M$E5NtD=uhT}_L^!@csD$^XtWydd+Dzvvv_;YYXWA8OV=*gM z&Y>VHf^8~G3r(S{E&gRD;-(#H;?4MfMhU5x4n50?t(NN8iG;*+KbvXcqV_WuFIl>5 z`3iG;G-mA}oO(>r#Y; zLzp9)N>k;ryv~fWWk)6@lwyb$1y0T5E^aL`=q4Vy2lBzlF*VbLU6k5j*^=qI#_$yZU!lzi2di0$Q5x|gz=HZ!)xuY|^_6!p57U)PYCS)0k2 zeC9xNi(J-aMvAbbTf-c8sjO)6&~VIe<{LSmzxjwo%ajfC&5#zM1ZS!#cjw!@GH!b} z7FPuq^5t$@jM!xU1rz(Eg!G{0Y|f<8Oeq6AZK`8TrieA0Y0kqOMDvenMg9)tqs(gV zntc72rd20ZaL0z`$%3rl_lbI;msE!SW)ZW3sx^zI79{ijL__O}Dkf%qE=v zku=vK!j*fMC8PXy`kSA;=!}JEVcdZP-`;#tlr}00vyOo-*|8#;NZG7JA(22)%^46#!!I|emV#HN6iGK@njuVC_d1Z^#ETE3j?(v#T1U4xWxmP?e( zSDK$#Nw{U``T6>^B*skUi{Xy{yMyNrMZgiMsH`n~!>5K_%>vr11&WDgZr;&Kn@vnc zjC)pd@Bi~3J<0`vV|kjVj-$eQDWN<$R;$|rr$0Vyxd|Y^yNKs;xtnp;7wQr&h*xe=F4aqtQ5>>jLarAt_aTPu~Kl`~^`5tGj?4K76! z<|bSng+$4RnK^ZymP)h(bNI*W5Px0ZbS7mB_X6DK-(=jT_-!^niJuj%qo4;}!8Es( z?%;e>VHYy+iD<=rJURpL+pPx!ccQBGV8uSHY4x`UeL48U0VCjV?=u1i1N%@_M+f#p zGXjD3F$7kz{646`iv6f;4YY?VjEWp8H|~f25R{;rL)C)^pluCK8-*@va;Ux)TOY#o zr4=%M05w}jQ5&oqLokQ>Mqba4(1BWNoF08lr7((Gnqtd9DpTishJvVsr7)}W*V>opTr-fBRH7avx zGWZP5{`Ny?3A2XQtwz--=7lwbYxT!)`c}W8MJR{)hLXdA@U$`rZM^Y3{uc)88O6df zD8{sTJhJEz+QYh`*EQAVaE9=;m|+@v4ojq2$|E@}lkw#|z904BYH!H!o?$~9Lr1vU zsD9F;d!~EPq-$yP9C-X zrFD&UEO|E`Fsd8t+QUJXDrh;2mp0Y~E)_NFMI)QAmpL!0D+r#QpFF2HY1D{tUk)3} z^lcQenjAKbVKa9?cw@7YS(rb@J5Y6_lOK9+`tagU@$Uf_(IpI2f~d! z*2qqDk->hu%>%)$NL^ffD==}10B_(X$gJg0_#k{VLVM{ptnfYWd)fClyoH031C=_l znZxxA=vd6bxdbz@6brEoYp@*a`0H9P!Z;Tl*ur1bw&6@zJaZY=VlTRIAG-OwR}T(g zJzikRmvA;-#yNNueK?GbMA%GKIG1X%g=Qf_P3Y&}+~?71oKF@mpk3HXBN(8oaS>gM zZFC(jrW-34j(@hlfD|1@+6V07&r=!S zbl5%vjxU6)Zxwd?dhu4@4(#!zG2*)cm-}wT+kB7W?Y=`S_XMu=J%g)!&*NRbm+>BE zOlC%@H&xxcVqIA$UxySXjY36}*f8IBy@u zBS$cs5v-$b1=kz_e^+}qA4ih>wG5Jf)^kr1{dGL%=V#9Wm|I&9Rt}9~d!K*RtX2-( zwpn#Jdc~@F4k-7x9|+7jK|B?o|U+1$XeZ@GzniZ=t=s U)phQMA7IyoP|shC2N8$%KYG$qS^xk5 diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java index 13ca144dc0..0504baec7f 100644 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java +++ b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java @@ -173,7 +173,8 @@ private static class SavingTrustManager implements X509TrustManager { } public X509Certificate[] getAcceptedIssuers() { - throw new UnsupportedOperationException(); + return new X509Certificate[0]; + //throw new UnsupportedOperationException(); } public void checkClientTrusted(X509Certificate[] chain, String authType) @@ -188,5 +189,4 @@ public void checkServerTrusted(X509Certificate[] chain, String authType) } } -} - +} \ No newline at end of file diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/iamscigaporg.cer b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/iamscigaporg.cer deleted file mode 100644 index 3491263414e8627e35f5f298136f7e681fc9dfac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1411 zcmZuxeNYr-9KLsN@8CE%@<5Pyll4QwHv!xHLP z7{eEWFu9pp?yyo;JeP8Cych>tp`H$>@O3}9O+zHw2j>9u%zfN>JQ#Q52c;D^n+NQ-liw1{X z*(;S9BR|OB?wq;bd1_$e@bM?|wGW zx>!jNH#@pVdou+OG~ZNL(OKt?w|KkGm*;K^8D)35QuW6?{o6BZXI8IEdVJ!+Yb}qo z0SSkZnv{*f`Zb{A&KLPRN4no}7B*g<*X29X)Sa?0+qBkkv&E_NAwnPkJ`d>PHqrqV z+`8kGXf%vm8y+w6m2GiuAADooE1$J^zbp|1-<~z5q&OKGiH6^}zjV`PssbLqJ7xZn zz0D0z+zCZc#?OZW@DxRbh^TH%Cvg}bBTz6toQOukaB<)aF%XFYgka(gfp&fvN0-94 zphXnU>=GA-a`%DfzgmCxI^lE<1nasYLf7xV&{1&6O5KT`rVB`rG+tOChN{l<+M%o| z>yHdJi-Sh`-4^Dj>q7jm`)6mFj|M(4Za%(XR`&r55J2 zvGur)*6+S*54ENV6f=8H4o<0BRouC6 z`mHR|w(O!&v{^cIYoIc$tFEDMHT6eTe(S)a`Xt@y*1*$CTP78+x13KYsLdPQ(jzrY z-fmfz*SaA8rG;-=ZW@`|nBLry azQ*UTNKSqDuBztSJrNO~)M|b5aO!U+ecB)Z From 161680df9675a92ae7e3fbfc616187801beb4f46 Mon Sep 17 00:00:00 2001 From: Anuj Bhandar Date: Sun, 23 Apr 2017 16:58:07 -0400 Subject: [PATCH 3/4] adding pom file missed out in last commit --- modules/user-profile-migration/pom.xml | 129 +++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100755 modules/user-profile-migration/pom.xml diff --git a/modules/user-profile-migration/pom.xml b/modules/user-profile-migration/pom.xml new file mode 100755 index 0000000000..c76610e7f0 --- /dev/null +++ b/modules/user-profile-migration/pom.xml @@ -0,0 +1,129 @@ + + + + + airavata + org.apache.airavata + 0.17-SNAPSHOT + ../../pom.xml + + + 4.0.0 + + user-profile-migration + + + + wso2-maven2-repository + http://dist.wso2.org/maven2 + + + apache-maven2-repo + Apache Maven2 Repository + http://repo1.maven.org/maven2/ + + + + + + org.apache.axis2.wso2 + axis2 + 1.6.1.wso2v1 + + + org.wso2.securevault + org.wso2.securevault + 1.0.0 + + + commons-httpclient + commons-httpclient + 3.1 + + + + org.apache.httpcomponents + httpclient + 4.3.6 + + + + org.wso2.carbon + org.wso2.carbon.um.ws.api.stub + 4.0.2 + + + + mysql + mysql-connector-java + 5.1.6 + + + org.apache.airavata + user-profile-stubs + ${project.version} + + + org.apache.airavata + airavata-commons + 0.17-SNAPSHOT + + + org.apache.airavata + airavata-data-models + ${project.version} + + + + javax.ws.rs + javax.ws.rs-api + 2.0.1 + + + + org.jboss.resteasy + resteasy-client + 3.1.2.Final + + + + org.jboss.resteasy + resteasy-jackson2-provider + 3.1.2.Final + + + + org.keycloak + keycloak-admin-client + 3.0.0.Final + + + + + + src/main/java + + + org.apache.maven.plugins + maven-compiler-plugin + true + 2.0 + + 1.8 + 1.8 + + + + + + + \ No newline at end of file From 7d97f7340539968057196082395d14f5c616a24c Mon Sep 17 00:00:00 2001 From: Anuj Bhandar Date: Mon, 24 Apr 2017 15:48:37 -0400 Subject: [PATCH 4/4] removing installCert --- .../apache/airavata/utils/InstallCert.java | 192 ------------------ 1 file changed, 192 deletions(-) delete mode 100644 modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java diff --git a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java b/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java deleted file mode 100644 index 0504baec7f..0000000000 --- a/modules/user-profile-migration/src/main/java/org/apache/airavata/utils/InstallCert.java +++ /dev/null @@ -1,192 +0,0 @@ -package org.apache.airavata.utils; - -/** - * Created by anujbhan on 4/17/17. - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of Sun Microsystems nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -import java.io.*; -import java.net.URL; - -import java.security.*; -import java.security.cert.*; - -import javax.net.ssl.*; - -public class InstallCert { - - public static void main(String[] args) throws Exception { - String host; - int port; - char[] passphrase; - if ((args.length == 1) || (args.length == 2)) { - String[] c = args[0].split(":"); - host = c[0]; - port = (c.length == 1) ? 443 : Integer.parseInt(c[1]); - String p = (args.length == 1) ? "changeit" : args[1]; - passphrase = p.toCharArray(); - } else { - System.out.println("Usage: java InstallCert [:port] [passphrase]"); - return; - } - - File file = new File("jssecacerts"); - if (file.isFile() == false) { - char SEP = File.separatorChar; - File dir = new File(System.getProperty("java.home") + SEP - + "lib" + SEP + "security"); - file = new File(dir, "jssecacerts"); - if (file.isFile() == false) { - file = new File(dir, "cacerts"); - } - } - System.out.println("Loading KeyStore " + file + "..."); - InputStream in = new FileInputStream(file); - KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); - ks.load(in, passphrase); - in.close(); - - SSLContext context = SSLContext.getInstance("TLS"); - TrustManagerFactory tmf = - TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - tmf.init(ks); - X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0]; - SavingTrustManager tm = new SavingTrustManager(defaultTrustManager); - context.init(null, new TrustManager[] {tm}, null); - SSLSocketFactory factory = context.getSocketFactory(); - - System.out.println("Opening connection to " + host + ":" + port + "..."); - SSLSocket socket = (SSLSocket)factory.createSocket(host, port); - socket.setSoTimeout(10000); - try { - System.out.println("Starting SSL handshake..."); - socket.startHandshake(); - socket.close(); - System.out.println(); - System.out.println("No errors, certificate is already trusted"); - } catch (SSLException e) { - System.out.println(); - e.printStackTrace(System.out); - } - - X509Certificate[] chain = tm.chain; - if (chain == null) { - System.out.println("Could not obtain server certificate chain"); - return; - } - - BufferedReader reader = - new BufferedReader(new InputStreamReader(System.in)); - - System.out.println(); - System.out.println("Server sent " + chain.length + " certificate(s):"); - System.out.println(); - MessageDigest sha1 = MessageDigest.getInstance("SHA1"); - MessageDigest md5 = MessageDigest.getInstance("MD5"); - for (int i = 0; i < chain.length; i++) { - X509Certificate cert = chain[i]; - System.out.println - (" " + (i + 1) + " Subject " + cert.getSubjectDN()); - System.out.println(" Issuer " + cert.getIssuerDN()); - sha1.update(cert.getEncoded()); - System.out.println(" sha1 " + toHexString(sha1.digest())); - md5.update(cert.getEncoded()); - System.out.println(" md5 " + toHexString(md5.digest())); - System.out.println(); - } - - System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]"); - String line = reader.readLine().trim(); - int k; - try { - k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1; - } catch (NumberFormatException e) { - System.out.println("KeyStore not changed"); - return; - } - - X509Certificate cert = chain[k]; - String alias = host + "-" + (k + 1); - ks.setCertificateEntry(alias, cert); - - OutputStream out = new FileOutputStream("jssecacerts"); - ks.store(out, passphrase); - out.close(); - - System.out.println(); - System.out.println(cert); - System.out.println(); - System.out.println - ("Added certificate to keystore 'jssecacerts' using alias '" - + alias + "'"); - } - - private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray(); - - private static String toHexString(byte[] bytes) { - StringBuffer sb = new StringBuffer(bytes.length * 3); - for(int b = 0;b < bytes.length;b++) { - b &= 0xff; - sb.append(HEXDIGITS[b >> 4]); - sb.append(HEXDIGITS[b & 15]); - sb.append(' '); - } - return sb.toString(); - } - - private static class SavingTrustManager implements X509TrustManager { - - private final X509TrustManager tm; - private X509Certificate[] chain; - - SavingTrustManager(X509TrustManager tm) { - this.tm = tm; - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - //throw new UnsupportedOperationException(); - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - throw new UnsupportedOperationException(); - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - this.chain = chain; - tm.checkServerTrusted(chain, authType); - } - } - -} \ No newline at end of file