[gnutls-devel] GnuTLS | multiple remote PKCS#11 modules not working (#961)

Development of GNU's TLS library gnutls-devel at lists.gnutls.org
Fri Mar 27 16:49:38 CET 2020



Marc Kleine-Budde created an issue: https://gitlab.com/gnutls/gnutls/-/issues/961



Hello,

I have two almost identical smartcards (just the serial numbers are different), each one attached via an USB based smart card reader, on the hosts `certos` and `certos2`. To access them I have these config files in my home:
```
➜ (pts/58) mkl at dude02:~ (master) ✗ cat ~/.config/pkcs11/modules/certos.module
remote: |ssh certos.hi.pengutronix.de p11-kit remote /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
#log-calls: yes

➜ (pts/58) mkl at dude02:~ (master) ✗ cat ~/.config/pkcs11/modules/certos2.module
remote: |ssh certos2.hi.pengutronix.de p11-kit remote /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
#log-calls: yes
```

When I access them via `p11-kit-proxy.so` both are properly detected:

```
➜ (pts/58) mkl at dude02:~ (master) ✗ pkcs11-tool --module /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so -L
Available slots:
Slot 0 (0x10): SCM Microsystems Inc. SPR 532 [Vendor Interface] (60206024) 0...
  token label        : CycurCard   (User PIN)
  token manufacturer : xxx
  token model        : PKCS#15
  token flags        : login required, token initialized, PIN initialized
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 244f8b131a1e
  pin min/max        : 6/8
Slot 1 (0x11): Gemalto Gemplus USB SmartCard Reader 433-Swap [CCID Interface...
  (empty)
Slot 2 (0x12): Gemalto Gemplus USB SmartCard Reader 433-Swap [CCID Interface...
  (empty)
Slot 3 (0x13): Gemalto USB GemPCPinpad SmartCard Reader 01 00
  token label        : CycurCard   (User PIN)
  token manufacturer : xxx
  token model        : PKCS#15
  token flags        : login required, token initialized, PIN initialized
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 24c8c609160f
  pin min/max        : 4/8
```

However when using `p11tool`, not.
```
➜ (pts/58) mkl at dude02:~ (master) ✗ p11tool --list-token-urls
pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
pkcs11:model=PKCS%2315;manufacturer=xxx;serial=244f8b131a1e;token=CycurCard%20%20%20%28User%20PIN%29%00%00%00%00%00%00%00%00%00%00
```

I found out that `lib/pkcs11.c` refuses to load two modules with the same info :(
```
        /* initially check if this module is a duplicate */
        for (i = 0; i < active_providers; i++) {
                /* already loaded, skip the rest */
                if (module == providers[i].module ||
                    memcmp(&info, &providers[i].info, sizeof(info)) == 0) {
                        _gnutls_debug_log("p11: module %s is already loaded.\n", name);
                        return GNUTLS_E_INT_RET_0;
                }
        }
```

In my use case the `module` pointers are not the same, but the info is:
```
$14 = {cryptoki_version = {major = 2 '\002', minor = 20 '\024'}, manufacturer_id = "OpenSC Project", ' ' <repeats 18 times>, flags = 0, library_description = "OpenSC smartcard framework      ", library_version = {major = 0 '\000', minor = 20 '\024'}}
```
as both hosts use the same version of p11-kit.

The `memcmp()` on the `info` was added in 12f4abc02e718e2ab0f7ae80b3026a29028536e7 by @nmav, any idea how to work around this check.

regards,
Marc

-- 
Reply to this email directly or view it on GitLab: https://gitlab.com/gnutls/gnutls/-/issues/961
You're receiving this email because of your account on gitlab.com.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gnupg.org/pipermail/gnutls-devel/attachments/20200327/9e37928b/attachment.html>


More information about the Gnutls-devel mailing list