diff -r ae0734493f6b Lib/ssl.py --- a/Lib/ssl.py Fri Nov 22 02:22:51 2013 +0100 +++ b/Lib/ssl.py Fri Nov 22 02:36:11 2013 +0100 @@ -303,6 +303,7 @@ data, such as certificates and possibly a private key.""" __slots__ = ('protocol', '__weakref__') + windows_cert_stores = ("CA", "ROOT") def __new__(cls, protocol, *args, **kwargs): self = _SSLContext.__new__(cls, protocol) @@ -334,6 +335,30 @@ self._set_npn_protocols(protos) + def load_windows_store_certs(self, storename, purpose="serverAuth"): + if isinstance(purpose, _ASN1Object): + asn1obj = purpose + else: + asn1obj = _ASN1Object.fromname(purpose) + certs = bytearray() + for cert, encoding, trust in enum_certificates(storename): + if encoding == "x509_asn": + if trust is True or asn1obj.oid in trust: + certs.extend(cert) + self.load_verify_locations(cadata=certs) + return certs + + def load_default_certs(self, purpose="serverAuth"): + if isinstance(purpose, _ASN1Object): + asn1obj = purpose + else: + asn1obj = _ASN1Object.fromname(purpose) + if sys.platform == "win32": + for storename in self.windows_cert_stores: + self.load_windows_store_certs(storename, asn1obj) + else: + self.set_default_verify_paths() + class SSLSocket(socket): """This class implements a subtype of socket.socket that wraps