Next: Smart cards and HSMs, Previous: Abstract key types, Up: Hardware security modules and abstract key types [Contents][Index]
In several systems there are keystores which allow to read, store and use certificates
and private keys. For these systems GnuTLS provides the system-key API in gnutls/system-keys.h
.
That API provides the ability to iterate through all stored keys, add and delete keys as well
as use these keys using a URL which starts with "system:". The format of the URLs is system-specific.
The systemkey
tool is also provided to assist in listing keys and debugging.
The systems supported via this API are the following.
iter: an iterator of the system keys (must be set to NULL
initially)
cert_type: A value of gnutls_certificate_type_t which indicates the type of certificate to look for
cert_url: The certificate URL of the pair (may be NULL
)
key_url: The key URL of the pair (may be NULL
)
label: The friendly name (if any) of the pair (may be NULL
)
der: if non-NULL the DER data of the certificate
flags: should be zero
This function will return on each call a certificate
and key pair URLs, as well as a label associated with them,
and the DER-encoded certificate. When the iteration is complete it will
return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE
.
Typically cert_type
should be GNUTLS_CRT_X509
.
All values set are allocated and must be cleared using gnutls_free()
,
Returns: On success, GNUTLS_E_SUCCESS
(0) is returned, otherwise a
negative error value.
Since: 3.4.0
void gnutls_system_key_iter_deinit (gnutls_system_key_iter_t iter)
int gnutls_system_key_add_x509 (gnutls_x509_crt_t crt, gnutls_x509_privkey_t privkey, const char * label, char ** cert_url, char ** key_url)
int gnutls_system_key_delete (const char * cert_url, const char * key_url)
For systems where GnuTLS doesn’t provide a system specific store,
it may often be desirable to define a custom class of keys
that are identified via URLs and available to GnuTLS calls such as gnutls_certificate_set_x509_key_file2.
Such keys can be registered using the API in gnutls/urls.h
. The function
which registers such keys is gnutls_register_custom_url.
st: A gnutls_custom_url_st
structure
Register a custom URL. This will affect the following functions:
gnutls_url_is_supported()
, gnutls_privkey_import_url()
,
gnutls_pubkey_import_url, gnutls_x509_crt_import_url()
and all functions that depend on
them, e.g., gnutls_certificate_set_x509_key_file2()
.
The provided structure and callback functions must be valid throughout
the lifetime of the process. The registration of an existing URL type
will fail with GNUTLS_E_INVALID_REQUEST
. Since GnuTLS 3.5.0 this function
can be used to override the builtin URLs.
This function is not thread safe.
Returns: returns zero if the given structure was imported or a negative value otherwise.
Since: 3.4.0
The input to this function are three callback functions as well as
the prefix of the URL, (e.g., "mypkcs11:") and the length of the prefix.
The types of the callbacks are shown below, and are expected to
use the exported gnutls functions to import the keys and certificates.
E.g., a typical import_key
callback should use gnutls_privkey_import_ext4.
typedef int (*gnutls_privkey_import_url_func)(gnutls_privkey_t pkey, const char *url, unsigned flags); typedef int (*gnutls_x509_crt_import_url_func)(gnutls_x509_crt_t pkey, const char *url, unsigned flags); /* The following callbacks are optional */ /* This is to enable gnutls_pubkey_import_url() */ typedef int (*gnutls_pubkey_import_url_func)(gnutls_pubkey_t pkey, const char *url, unsigned flags); /* This is to allow constructing a certificate chain. It will be provided * the initial certificate URL and the certificate to find its issuer, and must * return zero and the DER encoding of the issuer's certificate. If not available, * it should return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE. */ typedef int (*gnutls_get_raw_issuer_func)(const char *url, gnutls_x509_crt_t crt, gnutls_datum_t *issuer_der, unsigned flags); typedef struct custom_url_st { const char *name; unsigned name_size; gnutls_privkey_import_url_func import_key; gnutls_x509_crt_import_url_func import_crt; gnutls_pubkey_import_url_func import_pubkey; gnutls_get_raw_issuer_func get_issuer; } gnutls_custom_url_st;
Next: Smart cards and HSMs, Previous: Abstract key types, Up: Hardware security modules and abstract key types [Contents][Index]