On Tue, Jun 19, 2012 at 1:27 AM, Thomas Habets <tho...@habets.se> wrote:
> When I specify --enable-password-save to ./configure askpass is able
> to read the password from a file.

Right, this is the idea, and if you use the management interface you
can specify the password via that interface.

> Seems despite what the --help says it actually defaults to off. :-(

Right...

> Shouldn't it on be the default?

This is a very looooooooooooong argument... weather to allow unsecured
setup by default...

>
> I'm not an OpenSSL ninja, but this looks suspicious:
> ------
> if (!ENGINE_init(e))
>        msg (M_SSLERR, "Cannot initialize engine '%s'", engine);
>
>      ENGINE_free(e); /* free +1 reference count of the above two */
> [... more uses of e ...]
> ------
> Seems all the M_SSLERR lines there should set e=NULL and stop
> processing, to keep the same behaviour.

When msg with M_SSLERR is issued, the program terminates...
---
#define M_SSLERR  (M_FATAL | M_SSL)

  if (flags & M_FATAL)
    openvpn_exit (OPENVPN_EXIT_STATUS_ERROR); /* exit point */
----

> But yes, it works.

Thanks!
Any more comments regarding engine usage and cleanups?

Alon.

>
> On 18 June 2012 21:40, Alon Bar-Lev <alon.bar...@gmail.com> wrote:
>> Hello Thomas,
>>
>> Thank you for your comments and help.
>> I've updated the branch based on your work, but with changes...
>> The password is secret, and there is a standard mechanism in openvpn
>> to handle password...
>> So I tried to use it.
>>
>> For the conditionals, I wanted to get rid of the openssl engine
>> conditionals... anyway, the conditionals is not for the ENGINE type as
>> it does exists in 0.9.7 initial release. So I think that reducing use
>> of conditionals is better for reading the code.
>>
>> Can you please re-test and comment?
>>
>> Thanks!
>> Alon.
>>
>> On Mon, Jun 18, 2012 at 10:12 PM, Thomas Habets <tho...@habets.se> wrote:
>>> I can confirm that it works. I need to specify both engine and
>>> engine-pvk in the config though. If "engine" is not specified then
>>> ENGINE_load_builtin_engines() is never called. If you had this in mind
>>> then I think "engine-pvk" should require "engine". (just putting
>>> "engine" in the config file is enough, without parameter)
>>>
>>> Other nits:
>>> The call to ENGINE_load_private_key() should probably be surrounded by
>>> #ifdef HAVE_OPENSSL_ENGINE.
>>>
>>> Presumably without HAVE_OPENSSL_ENGINE the ENGINE struct and
>>> openssl/engine.h doesn't exist, so they should be #ifdeffed too.
>>>
>>> Fixed this, and added SRK password option, in attached patch to be
>>> applied on top of your engine branch. If option is not given then the
>>> default UI functions are called (for linux at console that means
>>> prompt the user).
>>>
>>> (the SRK password is not really a secret. If you have it then you're
>>> allowed to do operations  with the TPM chip. But you have to supply
>>> the tpm-sealed data when doing the operation. I've seen several
>>> recommendations to just leave it blank)
>>>
>>> On 18 June 2012 15:22, Alon Bar-Lev <alon.bar...@gmail.com> wrote:
>>>> Oh...
>>>> And I forgot mentioning that the UI method should be solved, using the
>>>> default is not something that is usable for openvpn.
>>>> Can you please take care of this?
>>>>
>>>> Alon.
>>>>
>>>> On Mon, Jun 18, 2012 at 3:25 PM, Alon Bar-Lev <alon.bar...@gmail.com> 
>>>> wrote:
>>>>> Hello Thomas,
>>>>>
>>>>> I did not have the global variable in mind :)
>>>>>
>>>>> I thought about your initial suggestion of specific private key
>>>>> engine, and it has value, so I added a new option.
>>>>>
>>>>> I propose the following [1], the problem is that I cannot test this out.
>>>>>
>>>>> While looking on the current engine implementation, there is a need to
>>>>> pass the pre/post strings, so there is more work to be done here, I
>>>>> will do this later.
>>>>>
>>>>> I also don't understand the need of using the dynamic in
>>>>> try_load_engine, but this will be resolved by supporting pre/post
>>>>> strings.
>>>>>
>>>>> Please review and test, should reach the same functionality as you 
>>>>> require.
>>>>>
>>>>> Regards,
>>>>> Alon.
>>>>>
>>>>> [1] https://github.com/alonbl/openvpn/compare/master...engine
>>>>>
>>>>> On Mon, Jun 18, 2012 at 12:45 AM, Thomas Habets <tho...@habets.se> wrote:
>>>>>> Those questions are why I'd prefer to reuse the already loaded ENGINE
>>>>>> (engine_persist in crypto_openssl), but it didn't appear to be
>>>>>> exported from the crypto backend (crypto_backend.h), which is why my
>>>>>> previous patch added exporting of it (by means of the init function).
>>>>>>
>>>>>> All versions of the patch works with non-static modules. The TPM one
>>>>>> I'm using is a .so file.
>>>>>> http://packages.debian.org/squeeze/amd64/libengine-tpm-openssl/filelist
>>>>>>
>>>>>> Do you want a separate ENGINE struct or not?
>>>>>> If same, how should it be exported from crypto_openssl to ssl_openssl?
>>>>>> I don't see any non-static accessor.
>>>>>> If different, call setup_engine() from ssl_openssl.c (meaning turning
>>>>>> setup_engine() non-static)?
>>>>>>
>>>>>> I was hesitant to create new non-statics in crypto_openssl, but one
>>>>>> easy solution is of course to just make
>>>>>> crypto_openssl.c::engine_persist non-static and use it directly, as
>>>>>> seen in attached patch.
>>>>>>
>>>>>> Seems I don't need to call ENGINE_init() at all. The attached patch
>>>>>> works, at least.
>>>>>>
>>>>>> I appreciate the code discipline. Really I do. :-)
>>>>>>
>>>>>> Regards,
>>>>>> Thomas
>>>>>>
>>>>>> On 17 June 2012 22:04, Alon Bar-Lev <alon.bar...@gmail.com> wrote:
>>>>>>> Yes, almost :)
>>>>>>>
>>>>>>> Won't it better to call ENGINE_init at setup_engine() or at
>>>>>>> try_load_engine() instead of at tls_ctx_load_priv_file()? It is just
>>>>>>> that tls_ctx_load_priv_file() can be called more than once, while the
>>>>>>> init should be called once, right?
>>>>>>> Are you sure all works well if engine is not statically linked?
>>>>>>> What about ENGINE_finish() at proper place?
>>>>>>>
>>>>>>> Thank you for your patience,
>>>>>>> Alon Bar-Lev.
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Jun 17, 2012 at 11:53 PM, Thomas Habets <tho...@habets.se> 
>>>>>>> wrote:
>>>>>>>> Hi.
>>>>>>>>
>>>>>>>> Need? No. I thought you preferred reusing the loaded/inited ENGINE
>>>>>>>> struct cached by existing code instead of creating a new one.
>>>>>>>>
>>>>>>>> Is the attached patch what you had in mind?
>>>>>>>>
>>>>>>>> (same description/sign-off)
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Thomas
>>>>>>>>
>>>>>>>>
>>>>>>>> On 17 June 2012 12:12, Alon Bar-Lev <alon.bar...@gmail.com> wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> Why do we need to crypto_init_lib_engine() twice? Can you please take
>>>>>>>>> a look at init_crypto_pre:: init_crypto_pre()?
>>>>>>>>>
>>>>>>>>> I also think crypto_init_lib_engine() should not return the engine...
>>>>>>>>> as won't it simpler to use ENGINE_by_id() at
>>>>>>>>> ssl_openssl.c::tls_ctx_load_priv_file()?
>>>>>>>>>
>>>>>>>>> Alon.
>>>>>>>>>
>>>>>>>>> On Sun, Jun 17, 2012 at 1:02 PM, Thomas Habets <tho...@habets.se> 
>>>>>>>>> wrote:
>>>>>>>>>> Hi.
>>>>>>>>>>
>>>>>>>>>> Ah yes, I first made the patch to an older version where some of 
>>>>>>>>>> these
>>>>>>>>>> things don't apply, and then forward-ported it.
>>>>>>>>>>
>>>>>>>>>> How about this?
>>>>>>>>>> ---------
>>>>>>>>>> Add support for SSL engine loading the private key.
>>>>>>>>>>
>>>>>>>>>> Option 'engine' is used to specify the name of the engine that
>>>>>>>>>> will load the private key.
>>>>>>>>>>
>>>>>>>>>> For example this can be "tpm" to use the OpenSSL TPM engine module
>>>>>>>>>> (libengine-tpm-openssl in Debian).
>>>>>>>>>>
>>>>>>>>>> It defaults to the built-in UI methods because openssl-tpm-engine
>>>>>>>>>> doesn't yet support user data being sent to the callback functions.
>>>>>>>>>> A patch for that on its way to them.
>>>>>>>>>>
>>>>>>>>>> Some more details:
>>>>>>>>>> http://blog.habets.pp.se/2012/02/TPM-backed-SSL
>>>>>>>>>>
>>>>>>>>>> Signed-off-by: Thomas Habets <hab...@google.com>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 17 June 2012 01:11, Alon Bar-Lev <alon.bar...@gmail.com> wrote:
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>> It is a good idea.
>>>>>>>>>>> But first, please remove the emacs stuff.
>>>>>>>>>>>
>>>>>>>>>>> Now, I see that the ENGINE_load_builtin_engines() is already called 
>>>>>>>>>>> at
>>>>>>>>>>> crypto_openssl.c::crypto_init_lib_engine, is there any require to
>>>>>>>>>>> duplicate this?
>>>>>>>>>>>
>>>>>>>>>>> There is already "engine" option, available only to polarssl, it can
>>>>>>>>>>> easily and correct way be used also for openssl, instead of having
>>>>>>>>>>> another option.
>>>>>>>>>>>
>>>>>>>>>>> What do you think?
>>>>>>>>>>> Alon.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sun, Jun 17, 2012 at 2:50 AM, Thomas Habets <tho...@habets.se> 
>>>>>>>>>>> wrote:
>>>>>>>>>>>> Patch attached.
>>>>>>>>>>>>
>>>>>>>>>>>> Add support for SSL engine loading the private key.
>>>>>>>>>>>>
>>>>>>>>>>>> Added option 'key-engine' specifying the name of the engine that
>>>>>>>>>>>> will load the private key.
>>>>>>>>>>>>
>>>>>>>>>>>> For example this can be "tpm" to use the OpenSSL TPM engine module
>>>>>>>>>>>> (libengine-tpm-openssl in Debian).
>>>>>>>>>>>>
>>>>>>>>>>>> It defaults to the built-in UI methods because openssl-tpm-engine
>>>>>>>>>>>> doesn't yet support user data being sent to the callback functions.
>>>>>>>>>>>> A patch for that on its way to them.
>>>>>>>>>>>>
>>>>>>>>>>>> Some more details:
>>>>>>>>>>>> http://blog.habets.pp.se/2012/02/TPM-backed-SSL
>>>>>>>>>>>>
>>>>>>>>>>>> Signed-off-by: Thomas Habets <hab...@google.com>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> typedef struct me_s {
>>>>>>>>>>>>  char name[]      = { "Thomas Habets" };
>>>>>>>>>>>>  char email[]     = { "tho...@habets.pp.se" };
>>>>>>>>>>>>  char kernel[]    = { "Linux" };
>>>>>>>>>>>>  char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt"; };
>>>>>>>>>>>>  char pgp[] = { "A8A3 D1DD 4AE0 8467 7FDE  0945 286A E90A AD48 
>>>>>>>>>>>> E854" };
>>>>>>>>>>>>  char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
>>>>>>>>>>>> } me_t;
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>> Live Security Virtual Conference
>>>>>>>>>>>> Exclusive live event will cover all the ways today's security and
>>>>>>>>>>>> threat landscape has changed and how IT managers can respond. 
>>>>>>>>>>>> Discussions
>>>>>>>>>>>> will include endpoint security, mobile security and the latest in 
>>>>>>>>>>>> malware
>>>>>>>>>>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Openvpn-devel mailing list
>>>>>>>>>>>> Openvpn-devel@lists.sourceforge.net
>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> typedef struct me_s {
>>>>>>>>>>  char name[]      = { "Thomas Habets" };
>>>>>>>>>>  char email[]     = { "tho...@habets.pp.se" };
>>>>>>>>>>  char kernel[]    = { "Linux" };
>>>>>>>>>>  char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt"; };
>>>>>>>>>>  char pgp[] = { "A8A3 D1DD 4AE0 8467 7FDE  0945 286A E90A AD48 E854" 
>>>>>>>>>> };
>>>>>>>>>>  char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
>>>>>>>>>> } me_t;
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> typedef struct me_s {
>>>>>>  char name[]      = { "Thomas Habets" };
>>>>>>  char email[]     = { "tho...@habets.pp.se" };
>>>>>>  char kernel[]    = { "Linux" };
>>>>>>  char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt"; };
>>>>>>  char pgp[] = { "A8A3 D1DD 4AE0 8467 7FDE  0945 286A E90A AD48 E854" };
>>>>>>  char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
>>>>>> } me_t;
>>>
>>>
>>>
>>> --
>>> typedef struct me_s {
>>>  char name[]      = { "Thomas Habets" };
>>>  char email[]     = { "tho...@habets.pp.se" };
>>>  char kernel[]    = { "Linux" };
>>>  char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt"; };
>>>  char pgp[] = { "A8A3 D1DD 4AE0 8467 7FDE  0945 286A E90A AD48 E854" };
>>>  char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
>>> } me_t;
>
>
>
> --
> typedef struct me_s {
>  char name[]      = { "Thomas Habets" };
>  char email[]     = { "tho...@habets.pp.se" };
>  char kernel[]    = { "Linux" };
>  char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt"; };
>  char pgp[] = { "A8A3 D1DD 4AE0 8467 7FDE  0945 286A E90A AD48 E854" };
>  char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
> } me_t;

Reply via email to