Re: [tpm2] Support for EAP-TLS with openssl TPM2 engine

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 13, 2019 at 04:56:17PM -0700, David Woodhouse wrote:
> On Sat, 2019-01-12 at 12:59 +0100, huger@xxxxxx wrote:
> > Hi
> > 
> > I am working on a plan to operate mobile Linux computers and would like 
> > them to use corporate wifi with EAP TLS. Security requires us to safely 
> > store the client key. Easiest solution would be in the computer's TPM 
> > 2.0 device.
> > 
> > So far we were not successful trying to set this up with wpa_supplicant 
> > and pkcs11 engine. Even if successful a solution with these multiple 
> > layers of abstraction is quite complex and therefore might be prone to 
> > updates of any of the components.
> > 
> > So I wonder if there are plans to directly support openssl tpm2 engine?
> 
> Here's a quick hack to make it work by abusing the OpenSC engine
> config, as a proof of concept. Making it work cleanly so that it can be
> merged is left as an exercise for the reader, or perhaps an interested
> party in one of the mailing lists I've added to Cc.
> 
> I have no idea why wpa_supplicant doesn't call ENGINE_load_dynamic()
> for current versions of OpenSSL. That seems to be a bug, which is why
> I've removed the #ifdefs around it.
> 
> Signed-off-by: David Woodhouse <dwmw2@xxxxxxxxxxxxx> (not that you'd
> want to apply it as-is).
> 
> diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
> index 705fa29a3..546d3a598 100644
> --- a/src/crypto/tls_openssl.c
> +++ b/src/crypto/tls_openssl.c
> @@ -864,7 +864,7 @@ static int tls_engine_load_dynamic_pkcs11(const char *pkcs11_so_path,
>   */
>  static int tls_engine_load_dynamic_opensc(const char *opensc_so_path)
>  {
> -	char *engine_id = "opensc";
> +	char *engine_id = "tpm2";
>  	const char *pre_cmd[] = {
>  		"SO_PATH", NULL /* opensc_so_path */,
>  		"ID", NULL /* engine_id */,
> @@ -1034,10 +1034,8 @@ void * tls_init(const struct tls_config *conf)
>  
>  #ifndef OPENSSL_NO_ENGINE
>  	wpa_printf(MSG_DEBUG, "ENGINE: Loading dynamic engine");
> -#if OPENSSL_VERSION_NUMBER < 0x10100000L
>  	ERR_load_ENGINE_strings();
>  	ENGINE_load_dynamic();
> -#endif /* OPENSSL_VERSION_NUMBER */
>  
>  	if (conf &&
>  	    (conf->opensc_engine_path || conf->pkcs11_engine_path ||
> diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf
> index 1bd43b226..b3045fb3d 100644
> --- a/wpa_supplicant/wpa_supplicant.conf
> +++ b/wpa_supplicant/wpa_supplicant.conf
> @@ -174,7 +174,7 @@ fast_reauth=1
>  # private_key option appear to be a PKCS#11 URI, and these options
>  # should not need to be used explicitly.
>  # make the opensc engine available
> -#opensc_engine_path=/usr/lib/opensc/engine_opensc.so
> +opensc_engine_path=/home/dwmw/git/openssl_tpm2_engine/.libs/libtpm2.so
>  # make the pkcs11 engine available
>  #pkcs11_engine_path=/usr/lib/opensc/engine_pkcs11.so
>  # configure the path to the pkcs11 module required by the pkcs11 engine
> _______________________________________________
> tpm2 mailing list
> tpm2@xxxxxxxxxxxx
> https://lists.01.org/mailman/listinfo/tpm2

Sweet! I'd been working on this too, I just got the hostapd / wpa_supplicant
test stuff working and was going to try setting
pkcs11_engine_path=/usr/lib/opensc/engine_pkcs11.so

To the tpm2-software/tpm2-pcks11 library.

>From the amount of changes it took you, it seems like your approach is cleaner,
so, out of curiousity, what was your ratoinal for going with this approach? I
was going to try the pcks11 way because I came across

https://w1.fi/cgit/hostap/plain/wpa_supplicant/examples/openCryptoki.conf

But, I haven't gotten to it yet as I got sidetracked right after I got the tests
up and running.

Thanks,
John

_______________________________________________
Hostap mailing list
Hostap@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/hostap



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux