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