How to access keys on HW tokens via PKCS11 Provider?
Blumenthal, Uri - 0553 - MITLL
uri at ll.mit.edu
Tue Feb 7 03:23:01 UTC 2023
Given that ENGINE API is deprecated, I’m trying to port my stuff to Provider API. Starting with “openssl” CLI to get the hang of it.
I installed PKCS11 provider from https://github.com/latchset/pkcs11-provider.git (after ensuring it passes 19 out of 20 tests), and started experimenting.
Immediately hit several problems:
OpenSSL does not seem to automatically load the PKCS11 provider, despite having it added to “openssl.cnf”
Forcing provider via “-provider-path /opt/local/lib/ossl-modules/pkcs11.dylib”, it fails to load/access the private key on my HW token.
Needless to say, it all works perfectly with ENGINE interface and current “libp11”.
Here’s what I have in “openssl.cnf” (relevant excerpt):
[openssl_init]
providers = provider_sect
#engines = engines_sect
[provider_sect]
default = default_sect
legacy = legacy_sect
pkcs11 = pkcs11_sect
gost = gost_sect
base = base_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
[pkcs11_sect]
module = /opt/local/libexec/openssl3/lib/ossl_modules/pkcs11.dylib
pkcs11-module-allow-export
activate = 1
[gost_sect]
module = /opt/local/libexec/openssl3/lib/ossl-modules/gostprov.dylib
activate = 1
[base_sect]
activate = 1
and here’s the error:
Decrypt CMS message in file /tmp/derive.97732.text.cms...
openssl cms -provider-path /opt/local/lib/ossl-modules/pkcs11.dylib -decrypt -aes256 -binary -inform PEM -in /tmp/derive.99252.text.cms -out /tmp/derive.99252.text.dec -inkey "pkcs11:id=%03;object-type=private"
Could not open file or uri for loading signing key from pkcs11:id=%03;object-type=private
40F6064DF87F0000:error:16000069:STORE routines:ossl_store_get0_loader_int:unregistered scheme:crypto/store/store_register.c:237:scheme=file
40F6064DF87F0000:error:80000002:system library:file_open:No such file or directory:providers/implementations/storemgmt/file_store.c:267:calling stat(pkcs11:id=%03;object-type=private)
40F6064DF87F0000:error:16000069:STORE routines:ossl_store_get0_loader_int:unregistered scheme:crypto/store/store_register.c:237:scheme=pkcs11
40F6064DF87F0000:error:1608010C:STORE routines:inner_loader_fetch:unsupported:crypto/store/store_meth.c:383:No store loader found. For standard store loaders you need at least one of the default or base providers available. Did you forget to load them? Info: Global default library context, Scheme (pkcs11 : 0), Properties (<null>)
FAILED to create decrypted file /tmp/derive.97732.text.dec
The token is PIV-compliant.
I tried several ways of specifying the key URI, none seemed to work. Please advise on how to address/name the key so that the Provider can access it. Or is the provider screwed up? But it seemed to work OK with NSS soft-token and with SoftHSM (except for one test)…
Thanks!
--
V/R,
Uri Blumenthal Voice: (781) 981-1638
Secure Resilient Systems and Technologies Cell: (339) 223-5363
MIT Lincoln Laboratory
244 Wood Street, Lexington, MA 02420-9108
Web: https://www.ll.mit.edu/biographies/uri-blumenthal
Root CA: https://www.ll.mit.edu/llrca2.pem
There are two ways to design a system. One is to make it so simple there are obviously no deficiencies.
The other is to make it so complex there are no obvious deficiencies.
- C. A. R. Hoare
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20230207/901d954e/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5249 bytes
Desc: not available
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20230207/901d954e/attachment-0001.p7s>
More information about the openssl-users
mailing list