diff options
author | 2015-11-16 10:48:20 -0800 | |
---|---|---|
committer | 2015-11-30 17:20:00 -0800 | |
commit | d3af9620817220d737fdb532c1ae1032bdd65e11 (patch) | |
tree | abf147a0d643303681a7110bcb78b279e886b256 /tests/NetworkSecurityConfigTest | |
parent | 7d72975c5b3e6f18710f078199e7a9e3f9376c60 (diff) |
Expose findTrustAnchorBySubjectAndPublicKey
This allows for faster lookups of TrustAnchors when checking pin
overrides without needing to iterate over all certificates.
Currently only the system and user trusted certificate store are
optimized to avoid reading the entire source before doing the trust
anchor lookup, improvements to the resource source will come in a later
commit.
This also refactors System/UserCertificateSource to avoid code
duplication.
Change-Id: Ice00c5e047140f3d102306937556b761faaf0d0e
Diffstat (limited to 'tests/NetworkSecurityConfigTest')
3 files changed, 52 insertions, 0 deletions
diff --git a/tests/NetworkSecurityConfigTest/res/xml/override_dedup.xml b/tests/NetworkSecurityConfigTest/res/xml/override_dedup.xml new file mode 100644 index 000000000000..5ba56754e768 --- /dev/null +++ b/tests/NetworkSecurityConfigTest/res/xml/override_dedup.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <!-- Entry with a bad pin. Connections to this will only succeed if overridePins is set. --> + <domain-config> + <domain>android.com</domain> + <pin-set> + <pin digest="SHA-256">aaaaaaaaIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin> + </pin-set> + <trust-anchors> + <certificates src="system" overridePins="false" /> + </trust-anchors> + </domain-config> + <!-- override that contains all of the system CA store. This should completely override the + anchors in the domain config-above with ones that have overridePins set. --> + <debug-overrides> + <trust-anchors> + <certificates src="system" /> + </trust-anchors> + </debug-overrides> +</network-security-config> diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java index 92eadc06cd49..69b2a9d55642 100644 --- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java +++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java @@ -19,15 +19,29 @@ package android.security.net.config; import java.util.Set; import java.security.cert.X509Certificate; +import com.android.org.conscrypt.TrustedCertificateIndex; + /** @hide */ public class TestCertificateSource implements CertificateSource { private final Set<X509Certificate> mCertificates; + private final TrustedCertificateIndex mIndex = new TrustedCertificateIndex(); public TestCertificateSource(Set<X509Certificate> certificates) { mCertificates = certificates; + for (X509Certificate cert : certificates) { + mIndex.index(cert); + } } public Set<X509Certificate> getCertificates() { return mCertificates; } + + public X509Certificate findBySubjectAndPublicKey(X509Certificate cert) { + java.security.cert.TrustAnchor anchor = mIndex.findBySubjectAndPublicKey(cert); + if (anchor == null) { + return null; + } + return anchor.getTrustedCert(); + } } diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java index c6f3680f455c..998bb681dd24 100644 --- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java +++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java @@ -402,4 +402,22 @@ public class XmlConfigTests extends AndroidTestCase { context.init(null, tms, null); TestUtils.assertConnectionSucceeds(context, "android.com" , 443); } + + public void testDebugDedup() throws Exception { + XmlConfigSource source = new XmlConfigSource(getContext(), R.xml.override_dedup, true); + ApplicationConfig appConfig = new ApplicationConfig(source); + assertTrue(appConfig.hasPerDomainConfigs()); + // Check android.com. + NetworkSecurityConfig config = appConfig.getConfigForHostname("android.com"); + PinSet pinSet = config.getPins(); + assertFalse(pinSet.pins.isEmpty()); + // Check that all TrustAnchors come from the override pins debug source. + for (TrustAnchor anchor : config.getTrustAnchors()) { + assertTrue(anchor.overridesPins); + } + // Try connections. + SSLContext context = TestUtils.getSSLContext(source); + TestUtils.assertConnectionSucceeds(context, "android.com", 443); + TestUtils.assertUrlConnectionSucceeds(context, "android.com", 443); + } } |