Hi Ken,
I am not quite sure what you mean by implementing our own streaming socket class wrapped in ssl using python, but since you seem to be familiar with the technical issues here, I'll go ahead and mention that we try not to implement ANYTHING ourselves whenever possible 🙂
I was not aware of urllib3 until you mentioned it. We have considered moving to the requests library, but at the moment we are using the urllib2 bundled in python which relies on the ssl module bundled in python which in turn uses the openssl C library to do it's secure transport. This library does not support reading root certificates from the system and instead relies on being provided a file (or directory, or string) with a set of root certificates to validate against. Obviously, if we craft this file before delivery, we cannot know what additional certificates have been added to an end user's machine in order to validate legitimate, impersonating certificates. I think both requests and urllib3 would likewise suffer from this problem since they recommend installing and using "certify" which just appears to be a python package for regularly updating a certificate store file.... not to mention that replacing the networking library would be extremely disruptive.
In any case, the installer is currently running against python 3.3. As part of our research to determine what would be necessary to get system root certificates in to the installer, we noticed that python 3.4 was already doing this. I am not sure if this is work that went in to python or an updated openssl, I haven't investigated, but it shouldn't really matter as long as it works. Therefore, we have decided to update the python we use to 3.5... and initial testing seems to indicate it does work as advertised. Of course when you update a major revision of your platform, there are numerous unforeseen problems that arise, and we are dealing with those before exposing the new work to the public 🙂
Thanks,
Steven