Bug 1217104 - network:vpn/openvpn: Bug rfc 7512 pkcs11 uris do not work
Summary: network:vpn/openvpn: Bug rfc 7512 pkcs11 uris do not work
Status: NEW
Alias: None
Product: openSUSE Tumbleweed
Classification: openSUSE
Component: Network (show other bugs)
Version: Current
Hardware: Other Other
: P5 - None : Normal (vote)
Target Milestone: Current
Assignee: Rahul Jain
QA Contact: E-mail List
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-11-14 06:53 UTC by William Brown
Modified: 2024-07-10 07:08 UTC (History)
3 users (show)

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---
william.brown: needinfo? (mohd.saquib)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description William Brown 2023-11-14 06:53:41 UTC
When testing openvpn with pkcs11 rfc7512 uris (such as 'pkcs11-id pkcs11:token=remote;label=1' ) openvpn does not parse them, using it's own format (pkcs11-id 'IBM/SW\x20\x20\x20TPM/0000000000000000/remote/32313039303063653831663432323865')

Openvpn should support rfc7512 uris to standardise it with other tools.

This is apparently supported on fedora, so we may need to look at what they did.
Comment 1 William Brown 2023-11-14 07:37:59 UTC
See also https://community.openvpn.net/openvpn/ticket/491
Comment 2 Mohd Saquib 2023-11-15 07:19:28 UTC
Hi William,
Could you please share the steps on how can I easily reproduce it locally?
Comment 3 William Brown 2023-11-16 01:10:07 UTC
No problem.

The best environment for this will be a virtual machine with libvirt and an emulated TPM. You can configure this with:

<domain type='kvm'>
  <devices>
    <tpm model='tpm-crb'>
      <backend type='emulator' version='2.0'/>
    </tpm>
  </devices>
</domain>

Ensure that the tpm mode is "CRB" and version 2.0.

Install the needed packages:

zypper install openssl-3 pkcs11-provider tpm2-pkcs11 opensc openvpn


Display info about the tpm pkcs11 module:

pkcs11-tool --module  /usr/lib64/pkcs11/libtpm2_pkcs11.so --show-info


Setup the tpm2 token:

 tpm2_ptool init

Add a token:

 tpm2_ptool addtoken --pid 1 --label remote --sopin 0000 --userpin 0000


Import a private key: this assumes ecdsa, change to rsa for that. 

tpm2_ptool import --label remote --privkey key.pem --algorithm ecc --sopin 0000 --key-label 1

Import the x509 cert associated to the key

tpm2_ptool addcert --label remote --key-label 1 crt.pem

List the objects, ensure you see a private key, public key, and cert. 

tpm2_ptool listobjects --label remote

- CKA_CLASS: CKO_PRIVATE_KEY
  CKA_ID:
  - '32313039303063653831663432323865'
  CKA_KEY_TYPE: CKK_EC
  CKA_LABEL: '1'
  id: 1
- CKA_CLASS: CKO_PUBLIC_KEY
  CKA_ID:
  - '32313039303063653831663432323865'
  CKA_KEY_TYPE: CKK_EC
  CKA_LABEL: '1'
  id: 2
- CKA_CLASS: CKO_CERTIFICATE
  CKA_ID:
  - '32313039303063653831663432323865'
  CKA_LABEL: '1'
  id: 3


OPTIONAL: Show the key and cert are working with openssl.

# provider.conf
```
openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
pkcs11 = pkcs11_sect

[default_sect]
activate = 1

[pkcs11_sect]
module = /usr/lib64/ossl-modules/pkcs11.so
pkcs11-module-path = /usr/lib64/pkcs11/libtpm2_pkcs11.so
activate = 1
```

OPENSSL_CONF=provider.conf openssl x509 -provider pkcs11  -noout -text -in "pkcs11:token=remote;label=1;type=cert?pin-value=0000"

OPENSSL_CONF=provider.conf openssl pkey -provider pkcs11  -noout -text -in "pkcs11:token=remote;label=1;type=private?pin-value=0000"


Configure openvpn:

# comment out key/cert
# add
pkcs11-providers /usr/lib64/pkcs11/libtpm2_pkcs11.so
pkcs11-id 'pkcs11:token=remote;label=1?pin-value=0000'
pkcs11-protected-authentication 0
pkcs11-cert-private 1

Start openvpn.


For extra debugging you can add:

[Service]
Environment="TPM2_PKCS11_LOG_LEVEL=2"
Environment="PKCS11_PROVIDER_DEBUG=file:/dev/stderr,level:2"
Comment 4 William Brown 2023-11-28 01:07:26 UTC
How did you go with these steps mate?
Comment 5 Mohd Saquib 2023-11-28 07:07:24 UTC
Hi William,
Sorry for the delay but I was busy with some important CVEs and bugs for SLE/ALP for the past few days and didn't get enough time to look into this. I'll start with this soon. Just wrapping up some things
Comment 6 William Brown 2023-11-28 07:23:35 UTC
Hey no stress mate! That's important work, :)