aboutsummaryrefslogtreecommitdiffstats
path: root/libs/MemorizingTrustManager/example
diff options
context:
space:
mode:
Diffstat (limited to 'libs/MemorizingTrustManager/example')
-rw-r--r--libs/MemorizingTrustManager/example/AndroidManifest.xml21
-rw-r--r--libs/MemorizingTrustManager/example/ant.properties4
-rw-r--r--libs/MemorizingTrustManager/example/build.gradle28
-rw-r--r--libs/MemorizingTrustManager/example/build.xml5
-rw-r--r--libs/MemorizingTrustManager/example/project.properties1
-rw-r--r--libs/MemorizingTrustManager/example/res/layout/mtmexample.xml64
-rw-r--r--libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/JULHandler.java258
-rw-r--r--libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/MTMExample.java232
8 files changed, 314 insertions, 299 deletions
diff --git a/libs/MemorizingTrustManager/example/AndroidManifest.xml b/libs/MemorizingTrustManager/example/AndroidManifest.xml
index cdc0450b3..ebc664d65 100644
--- a/libs/MemorizingTrustManager/example/AndroidManifest.xml
+++ b/libs/MemorizingTrustManager/example/AndroidManifest.xml
@@ -1,20 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="de.duenndns.mtmexample"
- android:versionCode="1"
- android:versionName="1.0">
-
+ package="de.duenndns.mtmexample"
+ android:versionCode="1"
+ android:versionName="1.0">
+
<uses-sdk
android:minSdkVersion="3"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
- <application android:label="@string/app_name" android:icon="@android:drawable/ic_lock_lock">
+ <application
+ android:label="@string/app_name"
+ android:icon="@android:drawable/ic_lock_lock">
<activity
android:name=".MTMExample"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"
- android:label="@string/app_name" >
+ android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -22,8 +24,9 @@
</intent-filter>
</activity>
- <!-- ADD THE FOLLOWING TO YOUR MANIFEST: -->
- <activity android:name="de.duenndns.ssl.MemorizingActivity"
- android:theme="@android:style/Theme.Translucent.NoTitleBar" />
+ <!-- ADD THE FOLLOWING TO YOUR MANIFEST: -->
+ <activity
+ android:name="de.duenndns.ssl.MemorizingActivity"
+ android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>
diff --git a/libs/MemorizingTrustManager/example/ant.properties b/libs/MemorizingTrustManager/example/ant.properties
index 27fcaadd8..2f48b3655 100644
--- a/libs/MemorizingTrustManager/example/ant.properties
+++ b/libs/MemorizingTrustManager/example/ant.properties
@@ -2,17 +2,13 @@
#
# This file must be checked in Version Control Systems, as it is
# integral to the build system of your project.
-
# This file is only used by the Ant script.
-
# You can use this to override default values such as
# 'source.dir' for the location of your java source folder and
# 'out.dir' for the location of your output folder.
-
# You can also use it define how the release builds are signed by declaring
# the following properties:
# 'key.store' for the location of your keystore and
# 'key.alias' for the name of the key to use.
# The password will be asked during the build when you use the 'release' target.
-
application.package=de.duenndns.mtmexample
diff --git a/libs/MemorizingTrustManager/example/build.gradle b/libs/MemorizingTrustManager/example/build.gradle
index 00bfe99e2..a07fbe87b 100644
--- a/libs/MemorizingTrustManager/example/build.gradle
+++ b/libs/MemorizingTrustManager/example/build.gradle
@@ -1,23 +1,23 @@
apply plugin: 'android'
dependencies {
- compile rootProject
+ compile rootProject
}
android {
- compileSdkVersion 19
- buildToolsVersion "19.1"
- defaultConfig {
- minSdkVersion 7
- targetSdkVersion 19
- }
+ compileSdkVersion 19
+ buildToolsVersion "19.1"
+ defaultConfig {
+ minSdkVersion 7
+ targetSdkVersion 19
+ }
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- res.srcDirs = ['res']
- }
- }
+ sourceSets {
+ main {
+ manifest.srcFile 'AndroidManifest.xml'
+ java.srcDirs = ['src']
+ res.srcDirs = ['res']
+ }
+ }
}
diff --git a/libs/MemorizingTrustManager/example/build.xml b/libs/MemorizingTrustManager/example/build.xml
index cdc74917d..0c61a2917 100644
--- a/libs/MemorizingTrustManager/example/build.xml
+++ b/libs/MemorizingTrustManager/example/build.xml
@@ -50,9 +50,8 @@
<!-- quick check on sdk.dir -->
<fail
- message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
- unless="sdk.dir"
- />
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
+ unless="sdk.dir" />
<!--
Import per project custom build rules if present at the root of the project.
diff --git a/libs/MemorizingTrustManager/example/project.properties b/libs/MemorizingTrustManager/example/project.properties
index 3692949fd..be830d977 100644
--- a/libs/MemorizingTrustManager/example/project.properties
+++ b/libs/MemorizingTrustManager/example/project.properties
@@ -6,7 +6,6 @@
# To customize properties used by the Ant build system use,
# "ant.properties", and override values to adapt the script to your
# project structure.
-
android.library.reference.1=../
# Project target.
target=android-19
diff --git a/libs/MemorizingTrustManager/example/res/layout/mtmexample.xml b/libs/MemorizingTrustManager/example/res/layout/mtmexample.xml
index dfef58b6c..4a08b6899 100644
--- a/libs/MemorizingTrustManager/example/res/layout/mtmexample.xml
+++ b/libs/MemorizingTrustManager/example/res/layout/mtmexample.xml
@@ -1,36 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
- <EditText
- android:id="@+id/url"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:hint="HTTPS address"
- android:text="https://op-co.de/mtm/"
- android:singleLine="true"
- />
- <Button
- android:id="@+id/connect"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Connect"
- />
- <TextView
- android:id="@+id/content"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Please enter a HTTPS URL and press 'Connect'!"
- android:textSize="11pt"
- />
- <Button
- android:id="@+id/manage"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Clean up Certificates"
- android:onClick="onManage"
- />
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ <EditText
+ android:id="@+id/url"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:hint="HTTPS address"
+ android:text="https://op-co.de/mtm/"
+ android:singleLine="true" />
+
+ <Button
+ android:id="@+id/connect"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Connect" />
+
+ <TextView
+ android:id="@+id/content"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="Please enter a HTTPS URL and press 'Connect'!"
+ android:textSize="11pt" />
+
+ <Button
+ android:id="@+id/manage"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Clean up Certificates"
+ android:onClick="onManage" />
</LinearLayout>
diff --git a/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/JULHandler.java b/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/JULHandler.java
index 6d183eb60..2cd70d0c5 100644
--- a/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/JULHandler.java
+++ b/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/JULHandler.java
@@ -34,136 +34,146 @@ import java.util.logging.Logger;
* If there are no {@code DebugLogSettings} configured, then all messages sent
* to JUL will be logged.
* </p>
- *
+ *
* @author Florian Schmaus
- *
*/
@SuppressWarnings("deprecation")
public class JULHandler extends Handler {
- /** Implement this interface to toggle debug logging.
- */
- public interface DebugLogSettings {
- public boolean isDebugLogEnabled();
- }
-
- private static final String CLASS_NAME = JULHandler.class.getName();
-
- /**
- * The global LogManager configuration.
- * <p>
- * This configures:
- * <ul>
- * <li> JULHandler as the default handler for all log messages
- * <li> A default log level FINEST (300). Meaning that log messages of a level 300 or higher a
- * logged
- * </ul>
- * </p>
- */
- private static final InputStream LOG_MANAGER_CONFIG = new StringBufferInputStream(
+ /**
+ * Implement this interface to toggle debug logging.
+ */
+ public interface DebugLogSettings {
+ public boolean isDebugLogEnabled();
+ }
+
+ private static final String CLASS_NAME = JULHandler.class.getName();
+
+ /**
+ * The global LogManager configuration.
+ * <p>
+ * This configures:
+ * <ul>
+ * <li> JULHandler as the default handler for all log messages
+ * <li> A default log level FINEST (300). Meaning that log messages of a level 300 or higher a
+ * logged
+ * </ul>
+ * </p>
+ */
+ private static final InputStream LOG_MANAGER_CONFIG = new StringBufferInputStream(
// @formatter:off
-"handlers = " + CLASS_NAME + '\n' +
-".level = FINEST"
-);
+ "handlers = " + CLASS_NAME + '\n' +
+ ".level = FINEST"
+ );
// @formatter:on
- // Constants for Android vs. JUL debug level comparisons
- private static final int FINE_INT = Level.FINE.intValue();
- private static final int INFO_INT = Level.INFO.intValue();
- private static final int WARN_INT = Level.WARNING.intValue();
- private static final int SEVE_INT = Level.SEVERE.intValue();
-
- private static final Logger LOGGER = Logger.getLogger(CLASS_NAME);
-
- /** A formatter that creates output similar to Android's Log.x. */
- private static final Formatter FORMATTER = new Formatter() {
- @Override
- public String format(LogRecord logRecord) {
- Throwable thrown = logRecord.getThrown();
- if (thrown != null) {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw, false);
- pw.write(logRecord.getMessage() + ' ');
- thrown.printStackTrace(pw);
- pw.flush();
- return sw.toString();
- } else {
- return logRecord.getMessage();
- }
- }
- };
-
- private static DebugLogSettings sDebugLogSettings;
- private static boolean initialized = false;
-
- public static void initialize() {
- try {
- LogManager.getLogManager().readConfiguration(LOG_MANAGER_CONFIG);
- initialized = true;
- } catch (IOException e) {
- Log.e("JULHandler", "Can not initialize configuration", e);
- }
- if (initialized) LOGGER.info("Initialzied java.util.logging logger");
- }
-
- public static void setDebugLogSettings(DebugLogSettings debugLogSettings) {
- if (!isInitialized()) initialize();
- sDebugLogSettings = debugLogSettings;
- }
-
- public static boolean isInitialized() {
- return initialized;
- }
-
- public JULHandler() {
- setFormatter(FORMATTER);
- }
-
- @Override
- public void close() {}
-
- @Override
- public void flush() {}
-
- @Override
- public boolean isLoggable(LogRecord record) {
- final boolean debugLog = sDebugLogSettings == null ? true : sDebugLogSettings
- .isDebugLogEnabled();
-
- if (record.getLevel().intValue() <= FINE_INT) {
- return debugLog;
- }
- return true;
- }
-
- /** JUL method that forwards log records to Android's LogCat. */
- @Override
- public void publish(LogRecord record) {
- if (!isLoggable(record)) return;
-
- final int priority = getAndroidPriority(record.getLevel());
- final String tag = substringAfterLastDot(record.getSourceClassName());
- final String msg = getFormatter().format(record);
-
- Log.println(priority, tag, msg);
- }
-
- /** Helper to convert JUL verbosity levels to Android's Log. */
- private static int getAndroidPriority(Level level) {
- int value = level.intValue();
- if (value >= SEVE_INT) {
- return Log.ERROR;
- } else if (value >= WARN_INT) {
- return Log.WARN;
- } else if (value >= INFO_INT) {
- return Log.INFO;
- } else {
- return Log.DEBUG;
- }
- }
-
- /** Helper to extract short class names. */
- private static String substringAfterLastDot(String s) {
- return s.substring(s.lastIndexOf('.') + 1).trim();
- }
+ // Constants for Android vs. JUL debug level comparisons
+ private static final int FINE_INT = Level.FINE.intValue();
+ private static final int INFO_INT = Level.INFO.intValue();
+ private static final int WARN_INT = Level.WARNING.intValue();
+ private static final int SEVE_INT = Level.SEVERE.intValue();
+
+ private static final Logger LOGGER = Logger.getLogger(CLASS_NAME);
+
+ /**
+ * A formatter that creates output similar to Android's Log.x.
+ */
+ private static final Formatter FORMATTER = new Formatter() {
+ @Override
+ public String format(LogRecord logRecord) {
+ Throwable thrown = logRecord.getThrown();
+ if (thrown != null) {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw, false);
+ pw.write(logRecord.getMessage() + ' ');
+ thrown.printStackTrace(pw);
+ pw.flush();
+ return sw.toString();
+ } else {
+ return logRecord.getMessage();
+ }
+ }
+ };
+
+ private static DebugLogSettings sDebugLogSettings;
+ private static boolean initialized = false;
+
+ public static void initialize() {
+ try {
+ LogManager.getLogManager().readConfiguration(LOG_MANAGER_CONFIG);
+ initialized = true;
+ } catch (IOException e) {
+ Log.e("JULHandler", "Can not initialize configuration", e);
+ }
+ if (initialized) LOGGER.info("Initialzied java.util.logging logger");
+ }
+
+ public static void setDebugLogSettings(DebugLogSettings debugLogSettings) {
+ if (!isInitialized()) initialize();
+ sDebugLogSettings = debugLogSettings;
+ }
+
+ public static boolean isInitialized() {
+ return initialized;
+ }
+
+ public JULHandler() {
+ setFormatter(FORMATTER);
+ }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public void flush() {
+ }
+
+ @Override
+ public boolean isLoggable(LogRecord record) {
+ final boolean debugLog = sDebugLogSettings == null ? true : sDebugLogSettings
+ .isDebugLogEnabled();
+
+ if (record.getLevel().intValue() <= FINE_INT) {
+ return debugLog;
+ }
+ return true;
+ }
+
+ /**
+ * JUL method that forwards log records to Android's LogCat.
+ */
+ @Override
+ public void publish(LogRecord record) {
+ if (!isLoggable(record)) return;
+
+ final int priority = getAndroidPriority(record.getLevel());
+ final String tag = substringAfterLastDot(record.getSourceClassName());
+ final String msg = getFormatter().format(record);
+
+ Log.println(priority, tag, msg);
+ }
+
+ /**
+ * Helper to convert JUL verbosity levels to Android's Log.
+ */
+ private static int getAndroidPriority(Level level) {
+ int value = level.intValue();
+ if (value >= SEVE_INT) {
+ return Log.ERROR;
+ } else if (value >= WARN_INT) {
+ return Log.WARN;
+ } else if (value >= INFO_INT) {
+ return Log.INFO;
+ } else {
+ return Log.DEBUG;
+ }
+ }
+
+ /**
+ * Helper to extract short class names.
+ */
+ private static String substringAfterLastDot(String s) {
+ return s.substring(s.lastIndexOf('.') + 1).trim();
+ }
}
diff --git a/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/MTMExample.java b/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/MTMExample.java
index 52e20dff6..31e37bd00 100644
--- a/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/MTMExample.java
+++ b/libs/MemorizingTrustManager/example/src/de/duenndns/mtmexample/MTMExample.java
@@ -28,116 +28,124 @@ import de.duenndns.ssl.MemorizingTrustManager;
* Example to demonstrate the use of MemorizingTrustManager on HTTPS
* sockets.
*/
-public class MTMExample extends Activity implements OnClickListener
-{
- MemorizingTrustManager mtm;
-
- TextView content;
- HostnameVerifier defaultverifier;
- EditText urlinput;
- String text;
- Handler hdlr;
-
- /** Creates the Activity and registers a MemorizingTrustManager. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- JULHandler.initialize();
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
- setContentView(R.layout.mtmexample);
-
-
- // set up gui elements
- findViewById(R.id.connect).setOnClickListener(this);
- content = (TextView)findViewById(R.id.content);
- urlinput = (EditText)findViewById(R.id.url);
-
- // register handler for background thread
- hdlr = new Handler();
-
- // Here, the MemorizingTrustManager is activated for HTTPS
- try {
- // set location of the keystore
- MemorizingTrustManager.setKeyStoreFile("private", "sslkeys.bks");
-
- // register MemorizingTrustManager for HTTPS
- SSLContext sc = SSLContext.getInstance("TLS");
- mtm = new MemorizingTrustManager(this);
- sc.init(null, new X509TrustManager[] { mtm },
- new java.security.SecureRandom());
- HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
- HttpsURLConnection.setDefaultHostnameVerifier(
- mtm.wrapHostnameVerifier(HttpsURLConnection.getDefaultHostnameVerifier()));
-
- // disable redirects to reduce possible confusion
- HttpsURLConnection.setFollowRedirects(false);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /** Updates the screen content from a background thread. */
- void setText(final String s, final boolean progress) {
- text = s;
- hdlr.post(new Runnable() {
- public void run() {
- content.setText(s);
- setProgressBarIndeterminateVisibility(progress);
- }
- });
- }
-
- /** Spawns a new thread connecting to the specified URL.
- * The result of the request is displayed on the screen.
- * @param urlString a HTTPS URL to connect to.
- */
- void connect(final String urlString) {
- new Thread() {
- public void run() {
- try {
- URL u = new URL(urlString);
- HttpsURLConnection c = (HttpsURLConnection)u.openConnection();
- c.connect();
- setText("" + c.getResponseCode() + " "
- + c.getResponseMessage(), false);
- c.disconnect();
- } catch (Exception e) {
- setText(e.toString(), false);
- e.printStackTrace();
- }
- }
- }.start();
- }
-
- /** Reacts on the connect Button press. */
- @Override
- public void onClick(View view) {
- String url = urlinput.getText().toString();
- setText("Loading " + url, true);
- setProgressBarIndeterminateVisibility(true);
- connect(url);
- }
-
- /** React on the "Manage Certificates" button press. */
- public void onManage(View view) {
- final ArrayList<String> aliases = Collections.list(mtm.getCertificates());
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, aliases);
- new AlertDialog.Builder(this).setTitle("Tap Certificate to Delete")
- .setNegativeButton(android.R.string.cancel, null)
- .setAdapter(adapter, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- try {
- String alias = aliases.get(which);
- mtm.deleteCertificate(alias);
- setText("Deleted " + alias, false);
- } catch (KeyStoreException e) {
- e.printStackTrace();
- setText("Error: " + e.getLocalizedMessage(), false);
- }
- }
- })
- .create().show();
- }
+public class MTMExample extends Activity implements OnClickListener {
+ MemorizingTrustManager mtm;
+
+ TextView content;
+ HostnameVerifier defaultverifier;
+ EditText urlinput;
+ String text;
+ Handler hdlr;
+
+ /**
+ * Creates the Activity and registers a MemorizingTrustManager.
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ JULHandler.initialize();
+ requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+ setContentView(R.layout.mtmexample);
+
+
+ // set up gui elements
+ findViewById(R.id.connect).setOnClickListener(this);
+ content = (TextView) findViewById(R.id.content);
+ urlinput = (EditText) findViewById(R.id.url);
+
+ // register handler for background thread
+ hdlr = new Handler();
+
+ // Here, the MemorizingTrustManager is activated for HTTPS
+ try {
+ // set location of the keystore
+ MemorizingTrustManager.setKeyStoreFile("private", "sslkeys.bks");
+
+ // register MemorizingTrustManager for HTTPS
+ SSLContext sc = SSLContext.getInstance("TLS");
+ mtm = new MemorizingTrustManager(this);
+ sc.init(null, new X509TrustManager[]{mtm},
+ new java.security.SecureRandom());
+ HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+ HttpsURLConnection.setDefaultHostnameVerifier(
+ mtm.wrapHostnameVerifier(HttpsURLConnection.getDefaultHostnameVerifier()));
+
+ // disable redirects to reduce possible confusion
+ HttpsURLConnection.setFollowRedirects(false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Updates the screen content from a background thread.
+ */
+ void setText(final String s, final boolean progress) {
+ text = s;
+ hdlr.post(new Runnable() {
+ public void run() {
+ content.setText(s);
+ setProgressBarIndeterminateVisibility(progress);
+ }
+ });
+ }
+
+ /**
+ * Spawns a new thread connecting to the specified URL.
+ * The result of the request is displayed on the screen.
+ *
+ * @param urlString a HTTPS URL to connect to.
+ */
+ void connect(final String urlString) {
+ new Thread() {
+ public void run() {
+ try {
+ URL u = new URL(urlString);
+ HttpsURLConnection c = (HttpsURLConnection) u.openConnection();
+ c.connect();
+ setText("" + c.getResponseCode() + " "
+ + c.getResponseMessage(), false);
+ c.disconnect();
+ } catch (Exception e) {
+ setText(e.toString(), false);
+ e.printStackTrace();
+ }
+ }
+ }.start();
+ }
+
+ /**
+ * Reacts on the connect Button press.
+ */
+ @Override
+ public void onClick(View view) {
+ String url = urlinput.getText().toString();
+ setText("Loading " + url, true);
+ setProgressBarIndeterminateVisibility(true);
+ connect(url);
+ }
+
+ /**
+ * React on the "Manage Certificates" button press.
+ */
+ public void onManage(View view) {
+ final ArrayList<String> aliases = Collections.list(mtm.getCertificates());
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, aliases);
+ new AlertDialog.Builder(this).setTitle("Tap Certificate to Delete")
+ .setNegativeButton(android.R.string.cancel, null)
+ .setAdapter(adapter, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ try {
+ String alias = aliases.get(which);
+ mtm.deleteCertificate(alias);
+ setText("Deleted " + alias, false);
+ } catch (KeyStoreException e) {
+ e.printStackTrace();
+ setText("Error: " + e.getLocalizedMessage(), false);
+ }
+ }
+ })
+ .create().show();
+ }
}