Commit Graph

140 Commits

Author SHA1 Message Date
Chad Brubaker
1edf850235 Merge "Use a custom TrustedCertificateStore" am: 95f15495a2
am: 5a12cf5cb7

* commit '5a12cf5cb703dd531ca8207e8db87b019eb6d477':
  Use a custom TrustedCertificateStore
2015-12-09 23:15:42 +00:00
Chad Brubaker
8d92314e5f Merge "Expose findByIssuerAndSignature" am: b27d820920
am: f1870eee34

* commit 'f1870eee348179ccfc796956fd366d77f77ab850':
  Expose findByIssuerAndSignature
2015-12-09 23:13:41 +00:00
Chad Brubaker
95f15495a2 Merge "Use a custom TrustedCertificateStore" 2015-12-09 20:53:01 +00:00
Chad Brubaker
b27d820920 Merge "Expose findByIssuerAndSignature" 2015-12-09 20:52:50 +00:00
Chad Brubaker
718e16ad57 Merge "Refactor NetworkSecurityPolicy to be pluggable" am: 224318aa13
am: cea1cf0185

* commit 'cea1cf0185b8c9fb4582936844326b385fb385a8':
  Refactor NetworkSecurityPolicy to be pluggable
2015-12-09 19:02:43 +00:00
Chad Brubaker
6568cf185d Refactor NetworkSecurityPolicy to be pluggable
This allows us to keep the logic for the NetworkSecurityPolicy in the
framework instead of in libcore.

Change-Id: I4bf494f79c27729cb17d93d90a91319492270ce9
2015-12-08 13:38:43 -08:00
Chad Brubaker
7845e44c0c Don't use IntegralToString
Fix master build

Change-Id: I084ada7ccf54ab1708306ad2a412d8a09f78dec4
2015-12-01 13:03:41 -08:00
Chad Brubaker
725fefb38a Use a custom TrustedCertificateStore
Providing a TrustedCertificateStore to TrustManagerImpl avoids loading
all of the trusted certificates into memory and indexing them. This
is mainly for the system certificate store where loading all of the
store into memory is wasteful for most applications.

Change-Id: I9e6057f6a13d38ea7762fcac2f62bd3ff475af39
2015-12-01 12:44:57 -08:00
Chad Brubaker
943baa1f09 Merge "Expose findTrustAnchorBySubjectAndPublicKey" am: 6fea66116c am: 3c096b3a88
am: bb670fc3ea

* commit 'bb670fc3ea65aa2e129227562769ee296e552f59':
  Expose findTrustAnchorBySubjectAndPublicKey
2015-12-01 20:36:22 +00:00
Chad Brubaker
bd94b53f63 Merge "Make NetworkSecurityConfigProvider.install lazy" am: 73c06b1dbe am: a2388beca1
am: e83b773bf5

* commit 'e83b773bf579caa97aae47e7a929dba42905980a':
  Make NetworkSecurityConfigProvider.install lazy
2015-12-01 20:35:02 +00:00
Chad Brubaker
fa9beebb83 Expose findByIssuerAndSignature
This will be used to create a custom conscrypt TrustedCertificateStore
to avoid loading all of the trusted certificates into memory in a
keystore.

Change-Id: Iaf54b691393ecadae6c7ff56b8adc6a2a2923d29
2015-12-01 12:19:39 -08:00
Chad Brubaker
6fea66116c Merge "Expose findTrustAnchorBySubjectAndPublicKey" 2015-12-01 20:13:40 +00:00
Chad Brubaker
73c06b1dbe Merge "Make NetworkSecurityConfigProvider.install lazy" 2015-12-01 20:13:23 +00:00
Chad Brubaker
d3af962081 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
2015-11-30 17:20:00 -08:00
Chad Brubaker
291a136a96 Merge "Remove isCertificateEntry check" am: 7d72975c5b am: 59919babe0
am: 19c7afab62

* commit '19c7afab6244303e78bbc6b5ab04520bbd4172d7':
  Remove isCertificateEntry check
2015-11-30 00:00:44 +00:00
Chad Brubaker
7d72975c5b Merge "Remove isCertificateEntry check" 2015-11-29 23:45:47 +00:00
Chad Brubaker
9a0130865e Remove isCertificateEntry check
This was returning false on some test keystores even when
getCertificate would correct return a certificate. Remove the check to
be consistent with how conscrypt loads trust anchors from the keystore.

Bug: 25897324
Change-Id: Ie87658a261ee7ba1cca6896e34b6c53b8abfba85
2015-11-26 14:00:50 -08:00
Chad Brubaker
2075a3ebc0 Make NetworkSecurityConfigProvider.install lazy
This defers looking up the meta-data from the install call to when the
rest of the config is lazily initialized.

Change-Id: I008a86f885e158ebe06a2bacdc358cd217635d05
2015-11-25 13:15:59 -08:00
Chad Brubaker
4148b1af0c Merge "Implement checkClientTrusted" am: 8e19803a6a am: a4a6cf9b51
am: 52ae900a29

* commit '52ae900a291844b6454fdb5f9edf65abb95c6fa9':
  Implement checkClientTrusted
2015-11-25 20:55:01 +00:00
Chad Brubaker
bdd13f02bc Implement checkClientTrusted
Bug: 25885029
Change-Id: I07ef11a556f1a1a65456ae5e3904c56902c6e82a
2015-11-25 12:22:06 -08:00
Chad Brubaker
aaffed261c Merge "Add NetworkSecurityConfigProvider.install" am: 08181cf647 am: 97f92ce41e
am: 1627a091f4

* commit '1627a091f48d1295653d37a580e30f89005fb6e5':
  Add NetworkSecurityConfigProvider.install
2015-11-17 23:36:13 +00:00
Chad Brubaker
93f027c32f Merge "Dedupe trust anchors" am: 690b5f6c0a am: e2caaea951
am: d2347a89fb

* commit 'd2347a89fb1a01f550a1b17c68ee234958c1be42':
  Dedupe trust anchors
2015-11-17 23:25:52 +00:00
Chad Brubaker
fd0d31a3f4 Add NetworkSecurityConfigProvider.install
This method is not currently called.

Change-Id: I73fd166b03009526868e0d9b5b209a9adaa4232f
2015-11-16 12:49:36 -08:00
Chad Brubaker
b0efdda86c Merge "Support X509TrustManagerExtensions methods" am: b324fb18d9 am: 8f45b48757
am: 35e8a31bfa

* commit '35e8a31bfabfecfda738b4f26960da0ea245dc42':
  Support X509TrustManagerExtensions methods
2015-11-12 23:10:58 +00:00
Chad Brubaker
2bd2eb33c0 Dedupe trust anchors
When getting trust anchors we need to dedup them based on the
certificate to avoid having multiple trust anchors with the same cert
but different pin override behavior. If there are multiple trust anchors
with the same cert, the trust anchor which overrides pins wins.

Change-Id: Ida31f2551f56997418b8b091bb2598c5593cb069
2015-11-12 13:13:45 -08:00
Chad Brubaker
93962c2f01 Support X509TrustManagerExtensions methods
Change-Id: I14a405e90f139b8d73eb9f88597fac804a7c18f3
2015-11-11 14:35:46 -08:00
Chad Brubaker
669692234b Merge "Add NetworkSecurityConfigProvider" am: d1c469e876 am: 8c89f4d28c
am: 70b2eede18

* commit '70b2eede18476f3a7d6344ffdc18b40f07bf4b5f':
  Add NetworkSecurityConfigProvider
2015-11-11 20:46:48 +00:00
Chad Brubaker
7d78ffcd7f Merge "Add support for debug-overrides configuration" am: f1e813ea33 am: 467804448d
am: 3210b8b4da

* commit '3210b8b4da3c745420d3010028f2bb7071044262':
  Add support for debug-overrides configuration
2015-11-11 19:38:13 +00:00
Chad Brubaker
5a1078f40d Add NetworkSecurityConfigProvider
Change-Id: I321e3ca94cc2a8d5e0e5d82a83b255ff5b8a71d2
2015-11-11 10:54:54 -08:00
Chad Brubaker
08d36202da Add support for debug-overrides configuration
Debug overrides are only used if the application is debuggable in
order to help local debugging and development by trusting additional
CAs. In a non-debuggable version of the application the debug-overrides
are ignored.

Trust anchors in the debug override configuration have two key
differences from those in base-config and domain-config:
1) trust anchors in the debug-overrides are trusted for all connections
in addition to any trust anchors included in the relevant base/domain
configs.
2) By default trust anchors in the debug config override pins, as their
purpose is for connecting to non-standard servers for debugging and
testing and those servers should not be pinned in the production
configuration.

Change-Id: I15ee98eae182be0ffaa49b06bc5e1c6c3d22baee
2015-11-10 12:40:00 -08:00
Chad Brubaker
da3dc74f49 Merge "Support nested domain-config elements" am: 749501e88e am: b549899d0b
am: 8427d98f7c

* commit '8427d98f7c3d6c1c05d78c5a9202c4110c3732b5':
  Support nested domain-config elements
2015-11-07 22:28:24 +00:00
Chad Brubaker
0420d8de74 Merge "Add xml source for network security configuration" am: ead46ecc84 am: 0cb8f01410
am: 06d93173b1

* commit '06d93173b1fe98013a41f3a35993dea8e60e48ad':
  Add xml source for network security configuration
2015-11-07 22:27:01 +00:00
Chad Brubaker
bd173c28fc Support nested domain-config elements
Nested domain-config inherit unset parameters from the domain-config
they are nested in. This helps avoid copy and pasted configs that are
almost the same except a few minor differences for a domain with
slightly different requirements.

For example: Consider a domain-config for example.com that, among other
settings, does not enforce hsts. Now if you want the rules for
example.com to apply to secure.example.com except that hsts _is_
enforced you can make a nested domain-config for secure.example.com
under example.com that sets hstsEnforced="true" and nothing else.

Change-Id: I9e33f7e62127fd7f4f15c3560fff2f2626477bd4
2015-11-07 13:31:04 -08:00
Chad Brubaker
5f96702f58 Add xml source for network security configuration
XmlConfigSource parses an ApplicationConfig from an xml resource.
Currently this supports app-wide default configuration via the
base-config element, per domain via the domain-config element and
inheritance of unset properties at parse time.

Inheritance of unset properties is currently only:
domain-config -> base-config -> platform default configuration
Where the most specific value is used.
For example: If the base-config specifies trust anchors, all connections
will use those anchors except for connections to a domain which has a
domain-config that specifies trust anchors, in which case the
domain-config's trust anchors will be used. If the domain-config or
base-config don't set trust anchors, or don't exist, then the platform
default trust anchors will be used.

Nested domain-config entries, debug-overrides, and thorough
documentation of the xml format will follow in later commits.

Change-Id: I1232ff1e8079a81b340bc12e142f0889f6947aa0
2015-11-06 22:24:01 -08:00
Chad Brubaker
eea9672b3d Merge "Fix incorrect hstsEnforced lookup" am: 1347cb81f4 am: 90b9ed5c82
am: d28d4bcf9b

* commit 'd28d4bcf9b6c9d8142fbed995250d41a59387c72':
  Fix incorrect hstsEnforced lookup
2015-11-07 02:53:50 +00:00
Chad Brubaker
825c3f91ed Fix incorrect hstsEnforced lookup
Change-Id: I00364d8c1d3311bebd3ad88e557860e694ba5018
2015-11-06 18:08:12 -08:00
Chad Brubaker
6e92454065 Merge "Fix directory check in UserCertificateSource" am: 1483ee3aa5 am: 2d7d8401a9
am: a8fd356640

* commit 'a8fd35664070134f0596238ad0c5bdaa3adc221b':
  Fix directory check in UserCertificateSource
2015-11-06 21:28:24 +00:00
Chad Brubaker
52fe096d86 Merge "Fix incorrect hasPerDomainConfigs check" am: c5c51dafb3 am: dd6d0918c4
am: a21b4a528d

* commit 'a21b4a528dc7c728b3546899c90758d583f35495':
  Fix incorrect hasPerDomainConfigs check
2015-11-06 21:26:55 +00:00
Chad Brubaker
74e67e04a5 Merge "Use a builder for NetworkSecurityConfig" am: 7e98f2e697 am: 478fad3cf5
am: 54b4b8fdfc

* commit '54b4b8fdfc336b8a4902637e622c3ede879edcde':
  Use a builder for NetworkSecurityConfig
2015-11-06 21:25:31 +00:00
Chad Brubaker
b0f8b4bb35 Fix directory check in UserCertificateSource
If the user has not added any CAs to the user trust store the user-added
directory will not have been created.

Change-Id: I8b5f73af3c0761c56969874231004fedbf7badda
2015-11-06 13:00:15 -08:00
Chad Brubaker
35de8d6d2b Fix incorrect hasPerDomainConfigs check
Change-Id: Iaeedbbcc5f12475d346a77dba84b38a1d3d8d346
2015-11-06 12:50:31 -08:00
Chad Brubaker
80a73f5939 Use a builder for NetworkSecurityConfig
The builder supports all the standard builder set* methods as well as
setting a parent builder to use when values are not set (recursively).
This allows us to have a level of inheretence in configurations without
complicating the lookup and trust checking logic by doing inheretence
when building the configs.

Change-Id: I054af83451e52761227479eadf9cb9803437505f
2015-11-05 12:50:30 -08:00
Chad Brubaker
f386e9da36 Merge "Add initial network security config implementation" am: 8c35820720 am: 0bafbbfcb4
am: b4b53b0741

* commit 'b4b53b0741b6ff75842d6630d5d1010c4efa766c':
  Add initial network security config implementation
2015-11-05 19:05:47 +00:00
Chad Brubaker
6bc1e3966c Add initial network security config implementation
Initial implementation of a unified application wide static
network security configuration.

This currently encompases:
* Trust decisions such as what trust anchors to use as well as static
  certificate pinning.
* Policy on what to do with cleartext traffic.

In order to prevent issues due to interplay of various components in an
application and their potentially different security requirements
configuration can be specified at a per-domain granularity in addition
to application wide defaults.

This change contains the internal data structures and trust management
code, hooking these up in application startup will come in a future
commit.

Change-Id: I53ce5ba510a4221d58839e61713262a8f4c6699c
2015-11-04 14:31:18 -08:00
Chad Brubaker
5bbf04803f Allow uid to be passed for more operations
This expands get, getmtime, exportKey, getKeyCharacteristcs and begin to
accept a uid to run as. This is only for system to use keys owned by
Wifi and VPN, and not something that can be used to do operations as
another arbitrary application.

Bug: 23978113
Change-Id: I06aa089859edc934a5415e3b184b917d6d171ae2
2015-09-10 15:34:11 -07:00
Alex Klyubin
a95550f801 Add KM_MIN_MAC_LENGTH tag to HMAC and AES-GCM keys.
This makes Android Keystore add the KM_MIN_MAC_LENGTH tag to generated
and imported HMAC and AES-GCM keys. This tag specifies the minimum
length of the MAC/authentication tag authorized to be used for the
key.

For HMAC keys the minimum MAC length is set to the length of the
digest associated with the key (HMAC keys are authorized for exactly
one digest). For AES keys the minimum authetication tag length is set
to 96 bit. This is the minimum supported by Android Keystore's AES-GCM
implementation.

Bug: 22337277
Change-Id: Ic6e47cf084734d1592788dc58088889f7fff74eb
2015-07-16 16:52:51 -07:00
Alex Klyubin
c781405f43 Merge "Use standard copyright banner in android/security/keymaster." into mnc-dev 2015-06-25 15:07:28 +00:00
Alex Klyubin
8effa36ca6 Use standard copyright banner in android/security/keymaster.
Bug: 18088752
Change-Id: I22eec18130cc46222d50481164069e7714154979
2015-06-24 16:06:55 -07:00
Alex Klyubin
3e7a9e4ec6 Track rename of INT and LONG Keymaster tag types.
Bug: 22008538
Change-Id: Id0091e59738c828a96305edbfc4f3958e712278b
2015-06-24 15:46:45 -07:00
Alex Klyubin
ae6cb7aad5 Keymaster INT, LONG and DATE tag values are unsigned.
This CL ensures that Android Keystore framework code complies with
signedness of keymaster tags. In particular:
* INT tags are unsigned 32-bit numbers, and
* LONG and DATE tags are unsigned 64-bit numbers.

The ensure compliance, KeymasterArguments and KeyCharacteristics
classes through which Android Keystore interacts with Keymaster tags
have been modified as follows:
* ENUM and INT tags which used to be conflated are now added/queried
  via separate methods, because ENUM can remain represented as an int
  data type whereas INT is now represented as a long data type with
  permitted range being [0; 2^32).
* Methods for adding/quering LONG tags have been switched from the long
  data type to the BigInteger data type and now ensure that the value
  is in the permitted [0; 2^63).
* Methods for adding/querying DATE tags now ensure the Date value is
  in the permitted range [0; 2^63) ms since Unix epoch.
* Methods for adding tags throw an IllegalArgumentException if the tag
  type is unsuitable for the method. This is to ensure that tags with
  invalid values cannot be added through similar methods (e.g., INT tag
  added via an ENUM tag addition method invoked with a negative value).

Bug: 22008538
Change-Id: I6eefd5cbb561cc52d27de952691af4d9d5e1af1e
2015-06-23 20:04:28 -07:00