TestTrustManager.java revision 8a720cceee7ce319d647738dfeda3f302879f370
18a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom/*
28a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * Copyright (C) 2010 The Android Open Source Project
38a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom *
48a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
58a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * you may not use this file except in compliance with the License.
68a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * You may obtain a copy of the License at
78a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom *
88a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
98a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom *
108a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * Unless required by applicable law or agreed to in writing, software
118a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
128a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * See the License for the specific language governing permissions and
148a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * limitations under the License.
158a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom */
168a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
178a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrompackage libcore.javax.net.ssl;
188a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
198a720cceee7ce319d647738dfeda3f302879f370Brian Carlstromimport java.io.PrintStream;
208a720cceee7ce319d647738dfeda3f302879f370Brian Carlstromimport javax.net.ssl.TrustManager;
218a720cceee7ce319d647738dfeda3f302879f370Brian Carlstromimport javax.net.ssl.X509TrustManager;
228a720cceee7ce319d647738dfeda3f302879f370Brian Carlstromimport java.security.cert.CertificateException;
238a720cceee7ce319d647738dfeda3f302879f370Brian Carlstromimport java.security.cert.X509Certificate;
248a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
258a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom/**
268a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * TestTrustManager is a simple proxy class that wraps an existing
278a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom * X509TrustManager to provide debug logging
288a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom */
298a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrompublic final class TestTrustManager implements X509TrustManager {
308a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
318a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    private static final PrintStream out = System.out;
328a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
338a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    private final X509TrustManager trustManager;
348a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
358a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    public static TrustManager[] wrap(TrustManager[] trustManagers) {
368a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        TrustManager[] result = trustManagers.clone();
378a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        for (int i = 0; i < result.length; i++) {
388a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            result[i] = wrap(result[i]);
398a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        }
408a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        return result;
418a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    }
428a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
438a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    public static TrustManager wrap(TrustManager trustManager) {
448a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        if (!(trustManager instanceof X509TrustManager)) {
458a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            return trustManager;
468a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        }
478a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        return new TestTrustManager((X509TrustManager) trustManager);
488a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    }
498a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
508a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    public TestTrustManager(X509TrustManager trustManager) {
518a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        this.trustManager = trustManager;
528a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    }
538a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
548a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    public void checkClientTrusted(X509Certificate[] chain, String authType)
558a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            throws CertificateException {
568a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        out.print("TestTrustManager.checkClientTrusted "
578a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom                  + "chain=" + chain.length + " "
588a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom                  + "authType=" + authType + " ");
598a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        try {
608a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            trustManager.checkClientTrusted(chain, authType);
618a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            out.println("OK");
628a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        } catch (CertificateException e) {
638a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            e.printStackTrace(out);
648a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            throw e;
658a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        }
668a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    }
678a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
688a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    public void checkServerTrusted(X509Certificate[] chain, String authType)
698a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            throws CertificateException {
708a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        out.print("TestTrustManager.checkServerTrusted "
718a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom                  + "chain=" + chain.length + " "
728a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom                  + "authType=" + authType + " ");
738a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        try {
748a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            trustManager.checkServerTrusted(chain, authType);
758a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            out.println("OK");
768a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        } catch (CertificateException e) {
778a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            e.printStackTrace(out);
788a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom            throw e;
798a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        }
808a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    }
818a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
828a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    /**
838a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom     * Returns the list of certificate issuer authorities which are trusted for
848a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom     * authentication of peers.
858a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom     *
868a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom     * @return the list of certificate issuer authorities which are trusted for
878a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom     *         authentication of peers.
888a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom     */
898a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    public X509Certificate[] getAcceptedIssuers() {
908a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        X509Certificate[] result = trustManager.getAcceptedIssuers();
918a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        out.print("TestTrustManager.getAcceptedIssuers result=" + result.length);
928a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom        return result;
938a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom    }
948a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom}
958a720cceee7ce319d647738dfeda3f302879f370Brian Carlstrom
96