> Am 14.01.2016 um 12:42 schrieb Sven Van Caekenberghe <s...@stfx.eu>:
> 
>> 
>> On 14 Jan 2016, at 12:12, Norbert Hartl <norb...@hartl.name> wrote:
>> 
>>> 
>>> Am 12.01.2016 um 16:25 schrieb Sven Van Caekenberghe <s...@stfx.eu>:
>>> 
>>> Given a ZdcSecureSocketStream you can access the #sslSession. In this 
>>> session object you can use #certificateName: to set the path or name of the 
>>> certificate (before you #connect !). That is the general idea.
>>> 
>>> Now, I don't know if this works or not. Be prepared to look in the plugin C 
>>> code! On Linux this will probably work.
>>> 
>>> And please let us know how it goes ;-)
>>> 
>>>> On 12 Jan 2016, at 16:05, Norbert Hartl <norb...@hartl.name> wrote:
>>>> 
>>>> Is there a way to make SSL connections to the outside world using client 
>>>> certificates from pharo?
>>>> 
>> 
>> There were some issues with certificates. I tested a lot but did an error on 
>> the way. Now I did everything again like creating certificates etc. I could 
>> establish a connection from a linux machine. At least it doesn't signal 
>> anything an tells it is connected.
> 
> So that *is* good news ! If you could share more details, that might help 
> others as well.

I'm on it :)

> 
>> On Mac OS it does not work.
> 
> Have you seen the C source code of the Mac SSL Plugin ? It is written against 
> an API from Mac OS System 7, from before Mac OS X, that is an OS from last 
> century, ~199X. This is ancient, you won't find many developers who want to 
> work on that, nor does it make sense towards the future.
> 
> OpenSSL is also available standard on Mac OS X, the Linux plugin could just 
> as well be used there (give or take).
> 
>> I think it has something to do with the certificate authority. On linux the 
>> CA of the apple server is installed system wide. The SSL plugin code only 
>> looks for the certificate and the key but not for the CA. So under linux it 
>> finds it in the system but on Mac OS I couldn't do the same. I imported the 
>> CA in the keychain but openssl does not seem to find it there. 
> 
> It is very simple why it does not work on Mac (like I said), it is just not 
> implemented !
> 
> Try finding where certName is used in sqMacSSL.c, there is a setter and 
> getter, but it is simply not used, so it can never work.
> 
> In sqUnixOpenSSL.c on the other hand, there is
> 
>       /* if a cert is provided, use it */
>       if(ssl->certName) {
>               if(ssl->loglevel) printf("sqSetupSSL: Using cert file %s\n", 
> ssl->certName);
>               if(SSL_CTX_use_certificate_file(ssl->ctx, ssl->certName, 
> SSL_FILETYPE_PEM)<=0)
>                 ERR_print_errors_fp(stderr);
> 
>               if(SSL_CTX_use_PrivateKey_file(ssl->ctx, ssl->certName, 
> SSL_FILETYPE_PEM)<=0)
>                 ERR_print_errors_fp(stderr);
>       }
> 
Oops I was only looking at the unix code assuming it would be used for Mac OS 
as well. In the Mac code there is

        /* Disable cert verification since we do that ourselves */
        status = SSLSetEnableCertVerify(ssl->ctx, false);

I don't understand the comment. But reading it I think this would "solve" the 
problem as well :)

Norbert


Reply via email to