16505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom/*
26505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  Licensed to the Apache Software Foundation (ASF) under one or more
36505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  contributor license agreements.  See the NOTICE file distributed with
46505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  this work for additional information regarding copyright ownership.
56505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  The ASF licenses this file to You under the Apache License, Version 2.0
66505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  (the "License"); you may not use this file except in compliance with
76505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  the License.  You may obtain a copy of the License at
86505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *
96505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *     http://www.apache.org/licenses/LICENSE-2.0
106505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *
116505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  Unless required by applicable law or agreed to in writing, software
126505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  distributed under the License is distributed on an "AS IS" BASIS,
136505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
146505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  See the License for the specific language governing permissions and
156505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom *  limitations under the License.
166505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom */
176505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom
186505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrompackage android.net.http;
196505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom
206505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstromimport android.net.http.SslCertificate;
216505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstromimport android.test.suitebuilder.annotation.LargeTest;
226505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstromimport java.io.ByteArrayInputStream;
236505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstromimport java.security.cert.CertificateFactory;
246505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstromimport java.security.cert.X509Certificate;
256505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstromimport junit.framework.TestCase;
266505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom
276505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrompublic class SslCertificateTest extends TestCase {
286505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom
296505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom    /**
306505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom     * Problematic certificate from Issue 1597
316505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom     * http://code.google.com/p/android/issues/detail?id=1597
326505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom     */
336505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom    private static final String Issue1597Certificate =
346505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "-----BEGIN CERTIFICATE-----\n"+
356505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "MIIBnjCCAQegAwIBAgIFAKvN774wDQYJKoZIhvcNAQEFBQAwADAeFw0yNzA5MjQw\n"+
366505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "MDAwMDFaFw0zNzA5MjQwMDAwMDFaMAAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ\n"+
376505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "AoGBAMNAaUSKw3stg6UHx6bWHNn0T5WR39UB43EZqdhhM0hnfpzwAzNs1T3jOAzF\n"+
386505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "OtgcX/XVt2Exc1vnwwuiJfvtPtBtQVsNu7wfk45cTUF45axBr4v8oFq7DOHCvs2C\n"+
396505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "pBDnw/v9PoOihuBamOjzRPL+oVhVfzEqEOILnZD1qEeVJn4RAgMBAAGjJDAiMCAG\n"+
406505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "A1UdEQQZMBeGD2h0dHBzOi8vMS4xLjEuMYcEAQEBATANBgkqhkiG9w0BAQUFAAOB\n"+
416505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "gQA7CMJylEjCR9CjztZUMLOutLe64RNhMq9iKgbDfJwYrcgvUNOxjrCdFW66lE9N\n"+
426505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "TDscc4zS2kpV41vcVYiGwabCNUPi2P6zfFSpYmGqwwu1NoEayqGPdDMrgCnMXVYV\n"+
436505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "X7HoVif4IdGvjFQrYcyU2VWSWBq6IGMVCR6RkC2YWnnNhw==\n"+
446505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        "-----END CERTIFICATE-----\n";
456505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom
466505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom    @LargeTest
476505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom    public void testSslCertificateWithEmptyIssuer() throws Exception {
4891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        X509Certificate x509Certificate = generateCertificate(Issue1597Certificate);
4991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        assertEquals("", x509Certificate.getSubjectDN().getName());
506505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom        SslCertificate sslCertificate = new SslCertificate(x509Certificate);
5191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        assertEquals("", sslCertificate.getIssuedBy().getDName());
526505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom    }
5391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom
5491154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    /**
5591154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom     * Problematic certificate from Issue 41662
5691154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom     * http://code.google.com/p/android/issues/detail?id=41662
5791154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom     */
5891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    private static final String Issue41662Certificate =
5991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "-----BEGIN CERTIFICATE-----\n"+
6091154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "MIIG6jCCBdKgAwIBAgIESPx/LDANBgkqhkiG9w0BAQUFADCBrjESMBAGCgmSJomT\n"+
6191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "8ixkARkWAnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZ\n"+
6291154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "FgJjYTEWMBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMx\n"+
6391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "HDAaBgNVBAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQG\n"+
6491154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "A1UEAxMNUG9zdGEgQ0EgUm9vdDAeFw0wODEwMjAxNDExMzBaFw0yODEwMTQyMjAw\n"+
6591154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "MDBaMIGrMRIwEAYKCZImiZPyLGQBGRYCcnMxFTATBgoJkiaJk/IsZAEZFgVwb3N0\n"+
6691154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "YTESMBAGCgmSJomT8ixkARkWAmNhMRYwFAYDVQQDEw1Db25maWd1cmF0aW9uMREw\n"+
6791154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "DwYDVQQDEwhTZXJ2aWNlczEcMBoGA1UEAxMTUHVibGljIEtleSBTZXJ2aWNlczEM\n"+
6891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "MAoGA1UEAxMDQUlBMRMwEQYDVQQDEwpQb3N0YSBDQSAxMIIBIjANBgkqhkiG9w0B\n"+
6991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "AQEFAAOCAQ8AMIIBCgKCAQEAl5msW5MdLW/2aDlezrjU3jW58MKrcMPHs2szlGdL\n"+
7091154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "nsAcSyYFF1JbyA8iuqLp7mhvcTz9m4jK82XBz/1mPq8wJMU9ekGnLhgbKLGKXRBA\n"+
7191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "sY9wzCvwpweQV6ui4vr2eOkS1j9Mk7ikatH8tNiIzkNrTj3npDpZv1w4G37iwtpb\n"+
7291154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "yjg+lkNIDY2nWV9roBsAZM8Lvbyi4vxP41YEQZ3hxaGGG0/RKHbugvGatgckxfin\n"+
7391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "4gpFG2mDhS9uafGgqnLHLwpxgBbi3g6+2TsxOKatTxwxx9/4MND1GjhxKTjDNYPl\n"+
7491154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "5JHUvr9fcvQMxP21/jbO4EsCWG+F38R90kT37hFL3l1qiQIDAQABo4IDDzCCAwsw\n"+
7591154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgcwGA1UdIASBxDCBwTCB\n"+
7691154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "vgYLKwYBBAH6OAoyAQEwga4wMAYIKwYBBQUHAgEWJGh0dHA6Ly93d3cuY2EucG9z\n"+
7791154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "dGEucnMvZG9rdW1lbnRhY2lqYTB6BggrBgEFBQcCAjBuGmxPdm8gamUgZWxla3Ry\n"+
7891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "b25za2kgc2VydGlmaWthdCBpemRhdmFja29nIChwcm9kdWtjaW9ub2cpIENBIHNl\n"+
7991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "cnZlcmEgU2VydGlmaWthY2lvbm9nIHRlbGEgUG9zdGU6ICJQb3N0YSBDQSAxIi4w\n"+
8091154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "ggG8BgNVHR8EggGzMIIBrzCByaCBxqCBw6SBwDCBvTESMBAGCgmSJomT8ixkARkW\n"+
8191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "AnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZFgJjYTEW\n"+
8291154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "MBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMxHDAaBgNV\n"+
8391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "BAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQGA1UEAxMN\n"+
8491154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "UG9zdGEgQ0EgUm9vdDENMAsGA1UEAxMEQ1JMMTCB4KCB3aCB2oaBo2xkYXA6Ly9s\n"+
8591154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "ZGFwLmNhLnBvc3RhLnJzL2NuPVBvc3RhJTIwQ0ElMjBSb290LGNuPUFJQSxjbj1Q\n"+
8691154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "dWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxjbj1TZXJ2aWNlcyxjbj1Db25maWd1cmF0\n"+
8791154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "aW9uLGRjPWNhLGRjPXBvc3RhLGRjPXJzP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxp\n"+
8891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "c3QlM0JiaW5hcnmGMmh0dHA6Ly9zZXJ0aWZpa2F0aS5jYS5wb3N0YS5ycy9jcmwv\n"+
8991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "UG9zdGFDQVJvb3QuY3JsMB8GA1UdIwQYMBaAFPLLjeI17xBDxNp7yvrriQOhIq+4\n"+
9091154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "MB0GA1UdDgQWBBQuZ6cm1uhncOeq+pAsMLzXYWUfhjAZBgkqhkiG9n0HQQAEDDAK\n"+
9191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "GwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOCAQEAjpmoaebsvfjgwgCYArou/s8k\n"+
9291154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "Tr50TUdcJYxAYmCFQp531E1F+qUCWM/7bZApqByR3+EUz8goI5O2Cp/6ISxTR1HC\n"+
9391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "Dn71ESg7/c8Bs2Obx0LGYPnlRPvw7LH31dYXpj4EMNAamhOfBXgY2htXHCd7daIe\n"+
9491154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "thvNkqWGDzmcoaGw/2BMNadlYkdXxudDBaiPDFm27yR7fPRibjxwkQVknzFezX/y\n"+
9591154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "46j+20LoGJ/IpneT209XzytiaqtZBy3yqz2qImVDqvn5doHw63LOUqt8vfDS1sbd\n"+
9691154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "zi3acAmPK1nERdCMJYJEEGNiGbkbw2cghwLw/4eYGXlj1VLXD3GU42uBr8QftA==\n"+
9791154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        "-----END CERTIFICATE-----\n";
9891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom
9991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    @LargeTest
10091154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    public void testSslCertificateWithMultipleCN() throws Exception {
10191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        X509Certificate x509Certificate = generateCertificate(Issue41662Certificate);
10291154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        String dn = x509Certificate.getSubjectDN().getName();
10391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        assertTrue(dn, dn.contains("Posta CA 1"));
10491154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        assertTrue(dn, dn.contains("Configuration"));
10591154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        SslCertificate sslCertificate = new SslCertificate(x509Certificate);
10691154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        assertEquals(dn, "Posta CA 1", sslCertificate.getIssuedTo().getCName());
10791154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    }
10891154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom
10991154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    private static X509Certificate generateCertificate(String pem) throws Exception {
11091154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        CertificateFactory cf = CertificateFactory.getInstance("X.509");
11191154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom        return (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(pem.getBytes()));
11291154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom    }
11391154ce658483488a1390e3da58cc2950fb02acbBrian Carlstrom
1146505122dfe96322bdeac4210d313b3f043c6a29aBrian Carlstrom}
115