summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabian Pflug <f.pflug@pengutronix.de>2026-03-04 16:31:42 +0100
committerKhem Raj <raj.khem@gmail.com>2026-03-04 22:26:02 -0800
commitf75a2ab194ee2ea0dd7572669fa3b052f2da36f9 (patch)
tree2832451a4dab4b052611895abfa26f85427fbc3b
parent40a1825c95333fbf114c41966d68339e12cf208a (diff)
downloadmeta-openembedded-f75a2ab194ee2ea0dd7572669fa3b052f2da36f9.tar.gz
signing.bbclass: add support for OpenSSL PKCS#11 provider
OpenSSL 4.0 will drop support for engines and use providers instead. To access SoftHSM and other PKCS#11 modules via the provider API, we rely on https://github.com/latchset/pkcs11-provider, which is already available as via pkcs11-provider recipe. We enable this provider by using a specific OpenSSL config when signing. This means that recipes inheriting this class can decide whether they want to use the engine or provider to access the key. SoftHSM seems to produce broken keys when calling the C_CopyObject, so disable caching in the provider for now. Signed-off-by: Jan Luebbe <jlu@pengutronix.de> Signed-off-by: Fabian Pflug <f.pflug@pengutronix.de> Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--meta-oe/classes/signing.bbclass32
1 files changed, 24 insertions, 8 deletions
diff --git a/meta-oe/classes/signing.bbclass b/meta-oe/classes/signing.bbclass
index cb54b55641..70c3807a6d 100644
--- a/meta-oe/classes/signing.bbclass
+++ b/meta-oe/classes/signing.bbclass
@@ -54,7 +54,7 @@
54SIGNING_PKCS11_URI ?= "" 54SIGNING_PKCS11_URI ?= ""
55SIGNING_PKCS11_MODULE ?= "" 55SIGNING_PKCS11_MODULE ?= ""
56 56
57DEPENDS += "softhsm-native libp11-native opensc-native openssl-native extract-cert-native" 57DEPENDS += "softhsm-native pkcs11-provider-native libp11-native opensc-native openssl-native extract-cert-native"
58 58
59def signing_class_prepare(d): 59def signing_class_prepare(d):
60 import os.path 60 import os.path
@@ -338,16 +338,10 @@ signing_import_install() {
338signing_prepare() { 338signing_prepare() {
339 export OPENSSL_MODULES="${STAGING_LIBDIR_NATIVE}/ossl-modules" 339 export OPENSSL_MODULES="${STAGING_LIBDIR_NATIVE}/ossl-modules"
340 export OPENSSL_ENGINES="${STAGING_LIBDIR_NATIVE}/engines-3" 340 export OPENSSL_ENGINES="${STAGING_LIBDIR_NATIVE}/engines-3"
341 export OPENSSL_CONF="${STAGING_LIBDIR_NATIVE}/ssl-3/openssl.cnf" 341 export OPENSSL_CONF="${STAGING_LIBDIR_NATIVE}/openssl-provider-signing.cnf"
342 export SSL_CERT_DIR="${STAGING_LIBDIR_NATIVE}/ssl-3/certs" 342 export SSL_CERT_DIR="${STAGING_LIBDIR_NATIVE}/ssl-3/certs"
343 export SSL_CERT_FILE="${STAGING_LIBDIR_NATIVE}/ssl-3/cert.pem" 343 export SSL_CERT_FILE="${STAGING_LIBDIR_NATIVE}/ssl-3/cert.pem"
344 344
345 if [ -f ${OPENSSL_CONF} ]; then
346 echo "Using '${OPENSSL_CONF}' for OpenSSL configuration"
347 else
348 echo "Missing 'openssl.cnf' at '${STAGING_ETCDIR_NATIVE}/ssl'"
349 return 1
350 fi
351 if [ -d ${OPENSSL_MODULES} ]; then 345 if [ -d ${OPENSSL_MODULES} ]; then
352 echo "Using '${OPENSSL_MODULES}' for OpenSSL run-time modules" 346 echo "Using '${OPENSSL_MODULES}' for OpenSSL run-time modules"
353 else 347 else
@@ -367,6 +361,26 @@ signing_prepare() {
367 echo "directories.tokendir = $SOFTHSM2_DIR" > "$SOFTHSM2_CONF" 361 echo "directories.tokendir = $SOFTHSM2_DIR" > "$SOFTHSM2_CONF"
368 echo "objectstore.backend = db" >> "$SOFTHSM2_CONF" 362 echo "objectstore.backend = db" >> "$SOFTHSM2_CONF"
369 363
364 cat > "${OPENSSL_CONF}" <<EOF
365openssl_conf = openssl_init
366
367[openssl_init]
368providers = provider_sect
369
370[provider_sect]
371default = default_sect
372pkcs11 = pkcs11_sect
373
374[default_sect]
375activate = 1
376
377[pkcs11_sect]
378pkcs11-module-quirks = no-operation-state no-deinit
379pkcs11-module-cache-keys = false
380pkcs11-module-encode-provider-uri-to-pem = true
381activate = 1
382EOF
383
370 for env in $(ls "${STAGING_DIR_NATIVE}/var/lib/meta-signing.env.d"); do 384 for env in $(ls "${STAGING_DIR_NATIVE}/var/lib/meta-signing.env.d"); do
371 . "${STAGING_DIR_NATIVE}/var/lib/meta-signing.env.d/$env" 385 . "${STAGING_DIR_NATIVE}/var/lib/meta-signing.env.d/$env"
372 done 386 done
@@ -378,6 +392,8 @@ signing_use_role() {
378 local role="${1}" 392 local role="${1}"
379 393
380 export PKCS11_MODULE_PATH="$(signing_get_module $role)" 394 export PKCS11_MODULE_PATH="$(signing_get_module $role)"
395 export PKCS11_PROVIDER_MODULE="$PKCS11_MODULE_PATH"
396 # export PKCS11_PROVIDER_DEBUG="file:/dev/stderr"
381 export PKCS11_URI="$(signing_get_uri $role)" 397 export PKCS11_URI="$(signing_get_uri $role)"
382 398
383 if [ -z "$PKCS11_MODULE_PATH" ]; then 399 if [ -z "$PKCS11_MODULE_PATH" ]; then