Thursday, January 02, 2025

Re: new security/pkcs11-helper, net/openvpn: enable PKCS#11

02.01.2025 15:46, Jeremie Courreges-Anglas пишет:
>
> Hi,
>
> On Tue, Dec 31, 2024 at 12:32:38AM +0000, Klemens Nanni wrote:
>> OpenVPN can use smart cards instead of --key/cert which works great for me
>> via --pkcs11-id '...' with values from 'openvpn --show-pkcs11-ids | grep id:'
>> on the client and no further config; the server needs no changes.
>>
>> See openvpn(8) "PKCS#11 / SmartCard options" for more.
>>
>>
>> New dependency:
>> Information for inst:pkcs11-helper-1.30.0
>>
>> Comment:
>> library with PKCS
>>
>> Required by:
>> openvpn-2.6.12p0
>>
>> Description:
>> pkcs11-helper allows using multiple PKCS#11 providers at the same
>> time, enumerating available token certificates, or selecting a
>> certificate directly by serialized id, handling card removal and
>> card insert events, handling card re-insert to a different
>> slot, supporting session expiration and much more all using a
>> simple API.
>>
>> pkcs11-helper is not designed to manage card content, since object
>> attributes are usually vendor specific, and 99% of application need
>> to access existing objects in order to perform signature and
>> decryption.
>>
>> Maintainer: Klemens Nanni <kn@openbsd.org>
>>
>> WWW: https://github.com/OpenSC/pkcs11-helper
>>
>> It can use different TLS implementations - I explictly enabled LibreSSL
>> alone and left OpenVPN's FLAVOR=mbedtls unchanged as I don't use that.
>>
>> Feedback? OK?
>
> 1. Please address the comments below,
>
>> Index: Makefile
>> ===================================================================
>> RCS file: /cvs/ports/net/openvpn/Makefile,v
>> diff -u -p -r1.130 Makefile
>> --- Makefile 21 Dec 2024 11:38:33 -0000 1.130
>> +++ Makefile 30 Dec 2024 23:16:33 -0000
>> @@ -26,6 +26,8 @@ CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/
>> LDFLAGS="-L${LOCALBASE}/lib ${LDFLAGS}"
>> CONFIGURE_ARGS+=--with-openssl-engine=no
>>
>> +SEPARATE_BUILD= Yes
>> +
>> DEBUG_PACKAGES= ${BUILD_PACKAGES}
>>
>> FLAVORS= mbedtls
>> @@ -36,7 +38,14 @@ LIB_DEPENDS+= security/polarssl
>> CONFIGURE_ARGS+= --with-crypto-library=mbedtls
>> WANTLIB += mbedcrypto mbedtls mbedx509 pthread
>> .else
>> -WANTLIB += crypto ssl
>> +REVISION= 0
>
> Even if the changes are specific to the default FLAVOR, please move
> REVISION next to DISTNAME so that I don't forget it in the next
> openvpn update.
>
>> +LIB_DEPENDS+= security/pkcs11-helper
>> +# dlopen()s p11-kit-proxy.so
>> +BUILD_DEPENDS+= security/p11-kit
>> +RUN_DEPENDS+= security/p11-kit
>
> IIUC the BDEP on security/p11-kit is needed to deterministically set a
> default pkcs11 module name ("p11-kit-proxy.so" on OpenBSD, grep for
> DEFAULT_PKCS11_MODULE). openvpn then dlopens DEFAULT_PKCS11_MODULE
> through pkcs11-helper. Also IIUC, you then only need p11-kit at
> runtime if you want to use one of the modules from p11-kit, including
> the default p11-kit-proxy.so mentioned above. openvpn(8) already
> lists the name of the p11-kit package that can be installed. So
> please drop the RUN_DEPENDS line.

Right, I'll see if p11-kit is really needed at all, that is, whether the
default works with it being not present during build and/or whether I can
just set it without the package.

>
>> +CONFIGURE_ARGS+= --enable-pkcs11
>> +WANTLIB += pthread pkcs11-helper
>> +WANTLIB += crypto ssl pkcs11-helper
>
> Please regen WANTLIB to reorder, drop the redundant "pkcs11-helper"
> mention and use a single line.
>
>> .endif
>>
>> SAMPLES_DIR= ${PREFIX}/share/examples/openvpn
>>
>
> 2. This security/pkcs11-helper port looks good to me, but you may want
> to look into the pthread_mutex_destroy warnings I see at runtime:
>
> pbuild /usr/ports/net/openvpn$ openvpn --show-pkcs11-ids
> 2025-01-02 12:45:34 PKCS#11: Adding PKCS#11 provider '/usr/local/lib/p11-kit-proxy.so'
>
> The following objects are available for use.
> Each object shown below may be used as parameter to
> --pkcs11-id option please remember to use single quote mark.
> pthread_mutex_destroy on mutex with waiters!
> pthread_mutex_destroy on mutex with waiters!
> pthread_mutex_destroy on mutex with waiters!
>
> I have no idea whether those warnings can turn into a problem in
> practice.

Ah, threading should be disabled; it does the TLS handshake fine, but later on
something goes wrong, which I haven't fully diagnosed yet.

'--disable-threading --disable-slotevent' fixes that, but I sent the old tarball.

>
> ok jca@ to import security/pkcs1-helper as is, ok jca@ for net/openvpn
> with the changes listed above.

Thanks, I'll import with threading turned off and bump openvpn as per above.

No comments:

Post a Comment