> On 15 Jan 2016, at 15:09, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> 
> Wow, thanks for sharing!
> 
> Please, please, Holger, share the new Mac SSL Plugin somewhere so that we can 
> test it too. (Next step is to push this change upstream in the VM).

Norbert, Holger,

I think an SSL Plugin for OS X based on the OpenSSL code for (L|U)nix is *very* 
important. 

Could you please share it, just for testing, please, please ?

Thx,

Sven

>> On 15 Jan 2016, at 14:49, Norbert Hartl <norb...@hartl.name> wrote:
>> 
>> Hi,
>> 
>>> 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 ;-)
>>> 
>> I spend some time yesterday trying it. With a linux installation I could 
>> issue a client connection and that didn't throw an error. Then Holger was 
>> really helpful with Mac OS. He just compiled the Mac plugin using the unix 
>> openssl sources. I just copied that in the VM folder and then I could do the 
>> same on my Mac. I tried to send a push message via apples push server using:
>> 
>> | deviceId payload ip stream notification |
>> payload := '{
>>   "aps" : {
>>       "alert" : "Pharo finally got it!"
>>   }
>> }'.
>> deviceId := 'XXX'.
>> 
>> notification := ByteArray streamContents: [ :str |
>>   str
>>              nextPut: 1;
>>              nextPutAll: (1 asPaddedByteArray: 4);
>>              nextPutAll: ((DateAndTime now + 1 day) asUTC asUnixTime 
>> asByteArray);
>>              nextPutAll: (32 asPaddedByteArray: 2);
>>              nextPutAll: (ByteArray readHexFrom: deviceId);
>>              nextPutAll: (payload size asPaddedByteArray: 2);
>>              nextPutAll: payload asByteArray ].
>> 
>> ip := NetNameResolver addressForName: 'gateway.push.apple.com' timeout: 30.
>> stream := ZdcSecureSocketStream
>>   openConnectionToHost: ip
>>   port: 2195
>>   timeout: 30.
>> stream
>>   binary;
>>   shouldSignal: true;
>>   autoFlush: false;
>>   bufferSize: 4096;
>>   timeout: 30.
>> stream sslSession
>>   enableLogging;
>>   certificateName: '/Users/norbert/multiprod.pem'.
>> stream
>>   connect;
>>   nextPutAll: notification;
>> flush;
>> close.
>> 
>> That is working and I receive the message on my phone. So basically the 
>> client certificate stuff seems to work. The awkward thing about it is that 
>> you have to specify a filename for the cert. I have the certificates in a 
>> database and writing a file everytime I want to send something is not that 
>> good. Especially not if there are concurrent requests for sending messages.
>> 
>> There is one constraint for this to work. You specify a filename for 
>> certificate. In the file you need to have certificate and key. The plugin 
>> reads both from the same file. There is no code for specifying a CA chain. 
>> So this is resolved system wide and that means you need to install every CA 
>> for your certificate in the system. 
>> 
>> Norbert
>> 
>>>> 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?
>>>> 
>>>> thanks,
>>>> 
>>>> Norbert
> 


Reply via email to