Skip to content

Commit

Permalink
KEYS: validate certificate trust only with selected key
Browse files Browse the repository at this point in the history
Instead of allowing public keys, with certificates signed by any
key on the system trusted keyring, to be added to a trusted keyring,
this patch further restricts the certificates to those signed by a
particular key on the system keyring.

This patch defines a new kernel parameter 'ca_keys' to identify the
specific key which must be used for trust validation of certificates.

Simplified Mimi's "KEYS: define an owner trusted keyring" patch.

Changelog:
- support for builtin x509 public keys only
- export "asymmetric_keyid_match"
- remove ifndefs MODULE
- rename kernel boot parameter from keys_ownerid to ca_keys

Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
  • Loading branch information
Dmitry Kasatkin authored and Mimi Zohar committed Jul 17, 2014
1 parent b342682 commit ffb70f6
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
possible to determine what the correct size should be.
This option provides an override for these situations.

ca_keys= [KEYS] This parameter identifies a specific key(s) on
the system trusted keyring to be used for certificate
trust validation.
format: id:<keyid>

ccw_timeout_log [S390]
See Documentation/s390/CommonIO for details.

Expand Down
1 change: 1 addition & 0 deletions crypto/asymmetric_keys/asymmetric_type.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ int asymmetric_keyid_match(const char *kid, const char *id)

return 1;
}
EXPORT_SYMBOL_GPL(asymmetric_keyid_match);

/*
* Match asymmetric keys on (part of) their name
Expand Down
19 changes: 19 additions & 0 deletions crypto/asymmetric_keys/x509_public_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@
#include "public_key.h"
#include "x509_parser.h"

static char *ca_keyid;

#ifndef MODULE
static int __init ca_keys_setup(char *str)
{
if (!str) /* default system keyring */
return 1;

if (strncmp(str, "id:", 3) == 0)
ca_keyid = str; /* owner key 'id:xxxxxx' */

return 1;
}
__setup("ca_keys=", ca_keys_setup);
#endif

/*
* Find a key in the given keyring by issuer and authority.
*/
Expand Down Expand Up @@ -171,6 +187,9 @@ static int x509_validate_trust(struct x509_certificate *cert,
if (!trust_keyring)
return -EOPNOTSUPP;

if (ca_keyid && !asymmetric_keyid_match(cert->authority, ca_keyid))
return -EPERM;

key = x509_request_asymmetric_key(trust_keyring,
cert->issuer, strlen(cert->issuer),
cert->authority,
Expand Down

0 comments on commit ffb70f6

Please sign in to comment.